Итак, я работаю с NodeJS и MongoDB, и я делаю конечную точку, которая позволяет клиентам обновлять свои профили пользователей несколькими необязательными полями данных. Так, один из запросов обновления может выглядеть следующим образом:findByIdAndUpdate С несколькими поддокументами
{
name: { givenName: 'first' },
about: 'whatever',
auth: { password: 'hashedPW' }
}
мангуст API Docs указать следующую информацию о findByIdAndUpdate
: Все главные ключи обновления уровня, которые не являются атомными имена операций рассматриваются как набор операций.
Таким образом, клавиша верхнего уровня, about
, отлично работает для обновления. Однако вложенные ключи name
и auth
будут перезаписаны значениями обновления, а не только установлены значения.
Теперь я мог бы пройти и вручную изменить каждое из полей, чтобы быть $set
ключом, но есть много разных полей, поэтому делать это было бы довольно неприятно. Есть ли простой способ применить правило $ set к поддокументам? то есть преобразование оператора в этом, с опцией Mongoose или что-то:
{
$set : { name: { givenName: 'first' } },
$set : { about: 'whatever' },
$set : { auth: { password: 'hashedPW' } }
}
Вы обычно должны быть в состоянии просто добавить полный объект в качестве второго параметра ... –
На основании документации-х формулировка, я не думаю, что это так; Я думаю, что это относится только к клавишам верхнего уровня. http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate –
У меня нет компьютера atm, поэтому я не могу его протестировать. В большинстве случаев я работаю с * update * вместо * findByIdAndUpdate * и работает для вложенных ключей. –