Javascript MongoDB точка нотации для встроенного документа

1

Я использую 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", но я бы предпочел объявить его в параметрах и передать его службе.

Есть идеи? Все подходы приветствуются!

  • 0
    Это ошибка JavaScript. Что вы имеете в виду, это $set: params . Когда вы делаете $set: { params } это раскрывается как применение "params" в качестве имени ключа для объекта. Это почти то же самое, что написать '$set': { 'params': params } , что, конечно, вам не нужно. params - это уже объект. Вам не нужно оборачивать это в один.
  • 0
    Да, ты прав! Спасибо!
Теги:

1 ответ

1
Лучший ответ

Вы не можете использовать точки в ключах при работе с 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()
}
  • 0
    Чтобы указать <поле> во встроенном документе или в массиве, используйте точечную запись. docs.mongodb.com/manual/reference/operator/update/set
  • 0
    Не проблема. То, что ОП пытается сделать «точечной нотацией», совершенно верно. Актуальная проблема заключается в неправильном понимании синтаксиса JavaScript.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню