#mongodb #mongoose
#mongodb #mongoose
Вопрос:
Я пытаюсь получить группы для пользователя, только если пользователь является частью этой группы и является ее членом true
. Вот схема группы
{
"isDefault": false,
"users": [
{
"membership": true,
"userId": "asd1234"
},
{
"membership": false,
"userId": "asdio21038028355"
},
{
"membership": false,
"userId": "as2398asjdhj"
}
],
"uuid": "c4vxitr33a9hb19n05iuqxlv1ycp47",
}
Это то, что я пытаюсь получить группы для пользователя
Group.find({ 'users.membership': true, 'users.userId': 'asdio21038028355' })
Ожидаемыми результатами должен быть пустой массив, но он также возвращает указанную выше группу.
Ответ №1:
Чтобы сопоставить элемент массива по нескольким полям, используйте $elemMatch, в противном случае для возврата документа необходимо выполнить только одно совпадение.
https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch
https://mongoplayground.net/p/UB-Z0GX-CYq
Group.find({
users: {
$elemMatch: {
"membership": true,
"userId": "asdio21038028355"
}
}
})