Mongodb 返回嵌套数组中的非匹配元素
这是我的数据库示例:
const users = [{
'username':'jack',
'songs':[{
'song':'Another Love',
'likes':false
}, {
'song':"i'm into you",
'likes': true
}]
}, {
'username':'Stromae',
'songs':[{
'song':'Take me to church',
'likes':false
}, {
'song':"Habits",
'likes': true
}]
}];
我正在尝试查找以下行:
const query = {'username':'Stromae' , 'songs.song':'Take me to church','songs.likes':true};
const result = await usersTable.find(query).project({'songs.$':1}).toArray();
如您所见,我正试图找到一个名为“Stromae”并且有一首“带我去教堂”歌曲但他不喜欢这首歌的用户。
我期望结果为空,而结果是:
{ _id: 5d302809e734acbc5ffa2a8f,
songs: [ { song: 'Take me to church', likes: false } ] }
正如您从结果中看到的那样,它忽略了我需要“喜欢”字段为真。
最佳答案
根据我的理解,您正在尝试匹配满足“歌曲”和“喜欢”两个字段的条件的“歌曲”数组中的数据。但是您没有提供逻辑,例如检查同一数组元素的两个字段。这就是为什么它要检查整个“歌曲”数组中的这个字段。
要检查单个数组元素的条件,您可以使用 $elemMatch并检查两个条件是否满足,使用 $and运营商。
您可以将 Mongo 查询用作:
db.usersTable.find({
"username": "Stromae",
songs: {
$elemMatch: {
$and: [
{
"song": "Take me to church"
},
{
"likes": true
}
]
}
}
})
只需更新您的“查找”查询,您可能会得到所需的结果。
关于node.js - 使用 MongoDB 4.0 查找函数返回匹配元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57090558/