在Mongo中,我如何将所有收集项与较大的数组相匹配?

时间:2016-06-02 18:13:22

标签: javascript mongodb

假设我在一个集合中有3个项目:

[
    {
        id: 'a',
        items: [1, 2, 3]
    }, {
        id: 'b',
        items: [4, 5, 6]
    }, {
        id: 'c',
        items: [7, 8, 9]
    }
]

在JavaScript代码方面,我所拥有的只是一个数组[5, 2, 6, 4, 7, 8]。我如何编写查询以仅从集合中选择第二个对象,因为我的数组包含其items数组的所有元素(4,5和6)?

1 个答案:

答案 0 :(得分:2)

使用mongoDB Aggregation Set Operator ,您可以过滤您的阵列。首先找出给定数组与实际数据库数组的交集,然后使用set equals方法。检查以下查询:

db.collectionName.aggregate({
    "$project": {
    "checkAllElem": {
        "$setEquals": [{
            "$setIntersection": ["$items", [5, 2, 6, 4, 7, 8]]
        }, "$items"]
    },
    "items": 1
    }
}, {
    "$match": {
    "checkAllElem": true
    }
})