У меня есть конвейер агрегации, и мои документы в настоящее время имеют следующий формат:
{
"user": "5e3d326537df7e4dda73eb23",
"sharedWithGroups": [ "5e3d326437df7e4dda73eb13", "5e3d326437df7e4dda73eb19" ],
"userGroupIds": [ "5e3d326437df7e4dda73eb19" ]
}
Где userGroupIds
- результат предыдущего этапа, где я нахожу идентификаторы групп, которые пользователь находится в.
Я пытаюсь добавить этап сопоставления в конвейер, чтобы найти все документы, которые имеют либо идентификатор пользователя, который совпадает с указанным c идентификатором, либо ИЛИ свойство sharedWithGroups
, которое содержит один из записей в userGroupIds
.
Я думал, что что-то вроде этого будет работать:
{
$match: {
$or: [
{ user: "5e3d326537df7e4dda73eb23" },
{ sharedWithGroups: { $in: "$userGroupIds" } }
]
}
}
Но я получаю ошибку: $in needs an array
. Я не понимаю, потому что $userGroupIds
определенно массив. Я пытался использовать $ expr, думая, что значение поля, возможно, не разрешается, но не повезло. Возможен ли такой подход или есть другой / лучший способ фильтрации этих документов по нескольким критериям?