如何在这样的查询上使用mongodb $ setDifference?

时间:2016-01-17 14:34:12

标签: mongodb-query

作为一名mongodb新手,我似乎无法弄清楚如何做这个简单的查询:

我有一系列值:[1,2,4,5,6,7]和这样的文件:

{" test" :1} {" test" :2} {" test" :3}

现在我想查询哪些值不在任何文档测试属性中。 我试过像这样使用$ setDifference:  db.testDocs.aggregate([{$ project:{test:1,notInList:{$ setDifference:[[1,2,3,4,5,6]," $ id"]},_id :0}}])

但这显然是不正确的。事实上,我甚至不确定$ setDifference是否是这样查询的最佳方式。如果它是如何使其工作?如果它不是最好的方式呢?

哦,查询实际上超过了10万个值,但我只是简化了这个问题的情况。

提前感谢您的回复。

1 个答案:

答案 0 :(得分:0)

好的,我不确定这是执行此查询的最有效方法,但这就是我解决它的方法:

db.testDocs.aggregate(
    [
        {
            $group:
                {
                    "_id":null,
                    values:
                    {
                        $push: "$test"
                    }
                }
        },
        {
            $project: {
                difference: {
                    $setDifference: [[1,2,3,4,5,6,7,8], "$values"]
                }
            }
        }
])

实际上非常简单。我只是不知道如何正确使用聚合框架。