#javascript #reactjs #mongodb #mongoose
Вопрос:
У меня есть документ mongo db, подобный этому
id: ObjectId(asdlkjjas_48@$#),
_user: 4593oawifjaslef,
country: { US: false, CA: false, MX: false, FR: false }
name: "kevin"
age: 28
Я получаю post-запрос от интерфейса с идентификатором объекта (необходимым для запроса этого документа), а также кодом страны
Итак, мой пользователь отправляет свой идентификатор и код страны в серверную часть, мне нужно обновить документ, соответствующий этому идентификатору, и обновить только код страны, вложенный в country .
Я пробую что-то вроде этого
incomingNumber = await Collection.findById(numberId) // get our document by id
const code = 'US' // get our country code
collection.updateOne({_id: incomingNumber}, {$set: { country[code]: true }}) //trying to update only the field in country(object) that matches our supplied country code(ex. 'US')
Комментарии:
1. работает ли это mongoosejs.com/docs/tutorials/findoneandupdate.html
2. Поле
country
является встроенным документом . Для работы со встроенными полями документа используйте точечную нотацию .
Ответ №1:
Чтобы сохранить country
объект и сохранить ключи, которые не обновляются, вы можете либо использовать литералы шаблона, начиная с его мангуста, либо использовать квадратные скобки,
Collection.updateOne({_id: objectId}, {$set: { ["country." code]: true}})
или
Collection.updateOne({_id: objectId}, {$set: { `country.${code}`: true}})
Ответ №2:
Кто-то опубликовал ответ на несколько секунд, затем удалил, перепечатал ваш ответ, и я отдам вам должное.
Ответ заключается в
Collection.updateOne({_id: incomingNumber}, {$set: { country: { [code]: true}}})
Мне в основном нужна была дополнительная фигурная скобка. Это работает для меня в этой ситуации, однако объект country теперь будет выглядеть так
{ US: true },
Я бы предпочел
{ US: true, FR: false, MX: false, CA: false }
Комментарии:
1. Эй, проверьте ответ, который я написал.