Я новичок в mongoDB, и я хочу использовать его для проекта с NodeJS. Все было в порядке, пока мне не пришлось обновлять некоторые документы в моей коллекции.
Итак, у меня есть документ, который является списком вещей, и я хочу его обновить, добавив что-то в список. Поэтому я пытаюсь использовать метод Update, но я действительно борюсь с $ addToSet и $ push (я имею в виду, что они просто не работают). Я думаю, что мой синтаксис является правильным, потому что если я делаю $ набор, он прекрасно работает, как и что:
collection.update(
{ "keyboard.name":"k1" },
{
$set: {
keys: {
"myFirstKeyname": {"mySecondKeyname": "myValue"}
}
}
},
{
upsert: true
}
)
, но если я просто заменить $ устанавливается $ addToSet или $ толчке, он не делает что-нибудь в базу данных, но у меня также нет ошибки ...
Я читал много вещей здесь и там, и я видел, что у многих людей была эта проблема, но я не мог найти решение.
Я предполагаю, что проблема связана с тем, что я пытаюсь обновить вложенное поле, но я не уверен.
Так что я пытался сделать что-то вроде этого:
$addToSet: {
keys: {
[myFirstKeyname]: {"mySecondKeyname": "myValue"}
}
}
И я также пытался построить мой запрос в JavaScript так:
toInsert = JSON.parse(obj); // obj comes from the parameters of my function
let keyName = Object.keys(toInsert)[0];
let fieldValue = toInsert[keyName];
let update = { $addToSet: { "keys": {} } }
update['$addToSet']['keys'][keyName] = toInsert[keyName];
update = JSON.stringify(update)
, который возвращает это:
{ "$addToSet": { "keys": { "myKeyName": {"value": "myValue", "type": "key"} } } }
И он работает, если я заменил $ addToSet на $ set.
Я также пробовал обозначение точки, но он тоже не работал, и я не могу использовать его в своем случае, потому что мне бы хотелось, чтобы динамическое имя ключа для нового значения, которое я вставлял. Я также попытался скопировать и вставить пример, представленный в документах mongoDB, но он не сработал ...
Sooo ... Что я делаю неправильно? Кто-нибудь имеет образец, который работает? Может ли это произойти откуда-то еще, что мой код?
Редактировать: на самом деле, я пытался обновить подзаголовок, который отличается от массива. Вот почему $ addToSet не работал.
Возможный дубликат [MongoDB - $, установленный для обновления или нажатия элемента Array] (http://stackoverflow.com/questions/24115088/mongodb-set-to-update-or-push-array-element) – matt