У меня возникли проблемы с пониманием того, как новые field:value
objects
добавлены в базы данных mongo
.Mongoose: как вставить поле/значение в существующий поддокумент
Скажем, у меня есть следующие document
:
var people={'firstname': 'John','surname':'Smith',
'favouritefood':[{'fruit':'apples','drink':'coffee'}]}
как добавить «овощ»: «брокколи» к «любимой пищи» так это выглядит следующим образом:
{'firstname': 'John','surname':'Smith',
'favouritefood':[{'fruit':'apples','drink':'coffee','vegetable':'broccoli'}]}
Если я печатаю :
people.findOneAndUpdate({'firstname':'John'},
{$push {favouritefood: {vegetable:broccoli}}},
{upsert:true})
это дает мне это:
{'firstname': 'John','surname':'Smith',
'favouritefood':[{'fruit':'apples','drink':'coffee'},{'vegetable':'broccoli'}]}
и если я стараюсь:
people.findOneAndUpdate({'favoritefood':'apples'},
{$push {vegetable:broccoli}}},
{upsert:true})
он говорит:
'$push' is empty. You must specify a field like so: {$push: {<field>: ...}}
Любая помощь очень ценится!
Причина условия запроса {'favoritefood': 'apples'} не будет соответствовать значению. Оператор $ push добавляет указанное значение в массив. Но на самом деле вы хотите добавить значение в {'fruit': 'apples', 'drink': 'coffee'}, который не является массивом. Если возможно, сделать зеркальное изменение структуры документа как '' 'favouritefood: [{'fruit': 'apples'}, {'drink': 'coffee'}]' '', тогда ваш код будет работать. –
Думаю, мне придется это сделать. Но кажется странным, что вам дана возможность создать что-то вроде 'favouritefood: [{'fruit': 'apples', 'drink': 'coffee'}]', но потом не редактировать его. – qts
Я имею в виду, что вы перепроектируете свою структуру документа, поскольку каждый элемент {'fruit': 'apples'} будет элементом в favouritefood. Вставляемый код вручную изменяется :). –