@artem78

Как удалить поле из массива вложенных документов в MongoDB?

Есть коллекция документов такого содержания:
{
    "url" : "http://site.ru/url1",
    "checks" : [
        {
            "check_date" : ISODate("2016-09-20T21:21:06.845Z"),
            "result" : 1,
            "html" : "<html><body>..."
        },
        {
            "check_date" : ISODate("2016-09-20T21:22:07.141Z"),
            "result" : 2,
            "html" : "<html><body>..."
        },
        {
            "check_date" : ISODate("2016-09-20T21:23:05.526Z"),
            "result" : 3
        }
    ]
}


Подскажите, как написать запрос для удаления поля "html" для всех элементов массива "checks" во всех документах (причём у некоторых поле html уже отсутствует)?

Я пробовал это сделать следующими способами, но видимо так не правильно:
> db.items.update({}, {$unset: {'checks.html':1}}, false, true);
WriteResult({ "nMatched" : 18, "nUpserted" : 0, "nModified" : 0 })
 
> db.items.update({}, {$unset: {'checks.$.html':1}}, false, true);
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
        "code" : 16837,
        "errmsg" : "The positional operator did not find the match needed from the query. Unexpanded update: checks.$.html"
    }
})
  • Вопрос задан
  • 785 просмотров
Решения вопроса 1
@artem78 Автор вопроса
Сделал таким образом:

db.items.find().forEach(function(doc) {
	if (doc.checks) {
            for (var i in doc.checks) {
                    if (doc.checks[i].html) {
                            delete doc.checks[i].html;
                    }
            }
            db.items.update({_id: doc._id}, {$set: {"checks": doc.checks}});
	}
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы