我有这样的查询:
collection.aggregate([
{ $match:{ "card.discovery": true } }
{ $sample: { size: 4 } }
]);
它可以工作,因为我需要从该集合中获得4个随机条目,但是card.discovery
可以是true
或null
,并且这显然只返回card.discovery
设置为true
的文档。
如何过滤文档,使card.discovery
可以是true
或null
?
您可以利用$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 } }
]);