我希望$match
有一个数组的字段,只填充false
个值。阵列可以是任何大小。我该怎么办呢?
答案 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
),它可能会更快运行(取决于数据量等)。