过滤属性为true或null的文档



我有这样的查询:

collection.aggregate([
{ $match:{ "card.discovery": true } }
{ $sample: { size: 4 } }
]);

它可以工作,因为我需要从该集合中获得4个随机条目,但是card.discovery可以是truenull,并且这显然只返回card.discovery设置为true的文档。

如何过滤文档,使card.discovery可以是truenull?

您可以利用$in操作符:

{ $match: { "card.discovery": { $in: [ true, null ] } } }

Mongo操场

试试这个$or选项

集合
[{ 
"_id" : 1.0, 
"card" : {
"discovery" : true
}
}
{ 
"_id" : 2.0, 
"card" : {
"discovery" : null
}
}
{ 
"_id" : 3.0, 
"card" : {
"discovery" : true
}
}
{ 
"_id" : 4.0, 
"card" : {
"discovery" : true
}
}
{ 
"_id" : 5.0, 
"card" : {
"discovery" : null
}
}
{ 
"_id" : 6.0, 
"card" : {
"discovery" : false
}
}
{ 
"_id" : 7.0, 
"card" : {
"discovery" : false
}
}]

查询

db1.aggregate([
{ $match: { $or: [{ "card.discovery": true }, { "card.discovery": null }] }, },
{ $sample: { size: 4 } }
]).toArray();

输出
[
{
"_id": 4,
"card": {
"discovery": true
}
},
{
"_id": 1,
"card": {
"discovery": true
}
},
{
"_id": 3,
"card": {
"discovery": true
}
},
{
"_id": 5,
"card": {
"discovery": null
}
}
]
}]

您可以使用$in运算符:

collection.aggregate([
{ $match: { "card.discovery": { $in: [null, true] } } },
{ $sample: { size: 4 } }
]);

也可以使用$or操作符:

collection.aggregate([
{ $match: { $or: ["{card.discovery": true }, {"card.discovery": null}] } },
{ $sample: { size: 4 } }
]);

最新更新