我想$match
通过一个具有数组的字段,只填false
充值。数组可以是任意大小。请问我该怎么做?
问问题
88 次
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 回答