0

我想$match通过一个具有数组的字段,只填false充值。数组可以是任意大小。请问我该怎么做?

4

1 回答 1

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),则操作可能会更快(取决于数据量等)

于 2013-06-19T18:37:10.917 回答