在Mongo Aggregation框架中对数组类型字段进行“复杂”过滤?

时间:2013-06-19 16:58:49

标签: mongodb aggregation-framework nosql

我希望$match有一个数组的字段,只填充false个值。阵列可以是任何大小。我该怎么办呢?

1 个答案:

答案 0 :(得分:2)

给出如下数据:

> db.so.insert({data: [true, true, false, false], name: 'A'})
> db.so.insert({data: [false, false, false], name: 'B'})
> db.so.insert({data: [false, false, true], name: 'C'})
> db.so.insert({data: [false], name: 'D'})

您可以使用$nin

> db.so.aggregate({$match: { data : { $nin: [true]  }} })
{
        "result" : [
                {
                        "_id" : ObjectId("51c1f654e376a9016c5a9a6d"),
                        "data" : [
                                false,
                                false,
                                false
                        ],
                        "name" : "B"
                },
                {
                        "_id" : ObjectId("51c1f65fe376a9016c5a9a6f"),
                        "data" : [
                                false
                        ],
                        "name" : "D"
                }
        ],
        "ok" : 1
}

如果您愿意,可以使用$and确保数组存在。

如果你可以预先计算这个计算的值(onlyFalse=true),它可能会更快运行(取决于数据量等)。