Я пытаюсь создать список наблюдений, где пользователи могут смотреть элементы. Я пытался создать его, добавив в список пользователей поле наблюдения. Список наблюдения будет представлять собой массив идентификаторов, соответствующих другим элементам.Как проверить, существует ли каждый элемент в массиве или нет
Пользователи Коллекция:
- ID: ObjectId
- Имя: строка
- Список наблюдения: массив т.е. [9872, 342, 4545, 234, 8745]
У меня есть вопрос связано с запросом этой структуры. Я хочу, чтобы иметь возможность написать запрос, в котором я передаю идентификатор пользователя и массив из ~ 20 идентификаторов и проверить, какие из этих идентификаторов пользователь наблюдает (т. Е. Какой из них существует в поле наблюдения для этого пользователя).
Я попробовал это первоначально:
db.users.find({
_id: 507c35dd8fada716c89d0013,
watchlist: { $in: [342, 999, 8745, etc...] }
});
Но это дает мне список пользователей, которые содержат какие-либо из этих элементов WatchList, которые не то, что я хочу. То, что я на самом деле хочу, это ответ, содержащий массив так:
{
id: 342,
exists: true
},
{
id: 999,
exists: false
},
{
id: 8745,
exists: true
}
Я бы даже быть хорошо просто получить массив элементов, которые соответствуют:
{
_id: 507c35dd8fada716c89d0013,
watching: [342, 8745]
}
Является ли это выполнимо, или я был бы лучше перемещать список наблюдения в отдельную коллекцию с пользователями в виде массива? (Моя забота о последнем подходе заключается в том, что пользователь будет наблюдать только несколько сотен элементов, но десятки тысяч пользователей могут смотреть один и тот же элемент.)
Попробуйте изменить его. Попробуйте сохранить список идентификаторов пользователей в каждом списке наблюдения и списке наблюдения за существованием данного пользователя. –