#node.js #mongodb
#node.js #mongodb
Вопрос:
Я пытаюсь структурировать список друзей с помощью MongoDB.
Вот как я в настоящее время структурирую его:
{
"_id": {
"$oid": "601c570da04b75fabcd2705d"
},
"user_id": 1,
"friendslist": {
3 : true
}
}
Как я могу создать запрос, который помещает в мою хэш-карту ( "friendslist"
это хэш-карта), а ключ равен 3 для идентификатора друга, а флаг true — для статуса ожидающего запроса на добавление в друзья. (Значение True означает, что они друзья, а false будет ожидающим запроса на добавление в друзья)
Это то, что у меня сейчас есть:
const upsertFriendId = db.collection('friends')
.updateOne(
{ user_id: userId },
{ $set: { ???? : ????} },
{ upsert: true }
);
Я не могу понять синтаксис, который мне нужно вставить в $set
объект.
Комментарии:
1. Какое значение вы хотели бы установить?
2. Я хочу обновить хэш-карту «список друзей». Если есть пользователь с идентификатором 3, ничего не делайте, иначе создайте
put
хэш-карту, чтобы добавить нового пользователя{ friend_id : true }
Ответ №1:
Чтобы убедиться, что вы не переопределяете остальные ключи внутри friendlist
, вы можете выполнить обновление, например
const mongoFriendKey = `friendlist.${/* FRIEND_ID_VARIABLE_GOES_HERE */}`;
const upsertFriendId = db.collection('friends')
.updateOne(
{
user_id: userId
},
{
$set:
{
[mongoFriendKey] : true
}
},
{ upsert: true }
);
В приведенном выше замените /* FRIEND_ID_VARIABLE_GOES_HERE */
на переменную friend id . При этом запрос будет искать друга с этим конкретным идентификатором, а затем попытается установить его true
, если не найден, без переопределения всего friendlist
вашего объекта.
Кроме того, я надеюсь, вы знаете, что делает upsert, если обновление не найдет документ, тогда оно в конечном итоге вставит его.
Комментарии:
1. Я получаю синтаксическую ошибку: i.imgur.com/fsfBZYd.png создает ли это также новую карту, если она не существует?
2. @DIRTYDAVE он добавит идентификатор друга в объект obj, если он не существует, и установит для него значение true
3. Моя ошибка с синтаксической ошибкой, дайте мне минуту, пожалуйста
4. Это выдает мне синтаксическую ошибку, когда я использую ` ` — «Неожиданная строка шаблона». Когда я переключаюсь на одинарные кавычки вместо ‘friendlist. $ {FriendID}’, это выдает мне другую ошибку: поле с префиксом доллара ($) ‘$ {FriendID}’ в ‘friendlist.$ {FriendID}’ недопустимо для хранения.
5. Отлично, спасибо! Я не думал делать это таким образом, я думал, что мне понадобится объект hashmap, но, думаю, я этого не делаю