我有一个用例,数据库建模如下:
name: XYZ
gradeCards: [{
id: 1234, // id of the report card
comments: ['GOOD','NICE','WOW']
}, {
id: 2345,
comments: ['GOOD','NICE TRY']
}]
现在,我有一个查询,我想查询架构如下:
我将获得一个id和值列表。 例如:给定的列表如下:
[{
id: 1234,
comments: ['GOOD','NICE']
},{
id: 2345,
comments: ['GOOD']
}]
简而言之,ID应该是匹配的,注释应该是该id的comments数组的子数组,并且数组中指定的所有条件都应该匹配,所以它应该是所有的条件提供的条件。
我能够得到这个查询,但是它匹配了comments数组中的所有元素,我希望id应该完全匹配,注释应该是一个子数组。
用于匹配comments数组中的所有元素:
db.getCollection('user').find({arr:{
$all: [{
id:1234,
comments:['GOOD','NICE','WOW']
},{
id:2345,
comments:['GOOD','NICE TRY']
}]
}})
答案 0 :(得分:1)
您可以尝试使用$all
$elemMatch
来匹配查询条件。
db.collection.find({
gradeCards: {
$all: [{
"$elemMatch": {
id: 1234,
comments: {
$in: ['GOOD', 'NICE']
}
}
}, {
"$elemMatch": {
id: 2345,
comments: {
$in: ['GOOD']
}
}
}, ]
}
})