MongoDB:检查嵌套数组是否包含子数组

时间:2017-03-12 14:43:42

标签: node.js mongodb mongoose mongodb-query mongoose-schema

我有一个用例,数据库建模如下:

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']
    }]
 }})

1 个答案:

答案 0 :(得分:1)

您可以尝试使用$all $elemMatch来匹配查询条件。

db.collection.find({
    gradeCards: {
        $all: [{
            "$elemMatch": {
                id: 1234,
                comments: {
                    $in: ['GOOD', 'NICE']
                }
            }
        }, {
            "$elemMatch": {
                id: 2345,
                comments: {
                    $in: ['GOOD']
                }
            }
        }, ]
    }
})