Я использую MongoDB с Javascript. Я пытаюсь объявить следующие параметры:
params = {
title: title,
description: description,
"media.image": image,
feedUpdated: new Date()
};
Затем я запускаю запрос с использованием службы, которая включает в себя использование $ set следующим образом:
collection.update({
_id: ObjectId(id)
}, {
$set: {
params
}
}, function(e, updated) {
cb(e, updated);
});
Но я получаю следующую ошибку:
MongoError: Пунктирное поле "media.image" в "params.media.image" недопустимо для хранения.
Я думаю, проблема связана с тем, что, объявляя объект с помощью кавычек, он объявляет его как ключ объекта media.image вместо того, чтобы оставить его как строку. Согласно документации MongoDB $ set:
Чтобы указать a во встроенном документе или в массиве, используйте точечную нотацию.
https://docs.mongodb.com/manual/reference/operator/update/set/
Я могу технически написать вручную запрос для включения "media.image", но я бы предпочел объявить его в параметрах и передать его службе.
Есть идеи? Все подходы приветствуются!
Вы не можете использовать точки в ключах при работе с MongoDB. Я могу предложить два подхода:
// #1 camelCase
params = {
title: title,
description: description,
mediaImage: image,
feedUpdated: new Date()
}
// #2 object
params = {
title: title,
description: description,
media: { image: image },
feedUpdated: new Date()
}
$set: params
. Когда вы делаете$set: { params }
это раскрывается как применение"params"
в качестве имени ключа для объекта. Это почти то же самое, что написать'$set': { 'params': params }
, что, конечно, вам не нужно.params
- это уже объект. Вам не нужно оборачивать это в один.