我正在尝试查找所有没有数组tags
或数组大小小于2的文档。我该怎么做?我正在尝试此操作,但不起作用:
db.collection.find({
'text' => { '$exists' => true }, # I need this one too
'tags' => {
'$or' => [
{ '$exists' => false },
{ '$lt' => ['$size', 2] }
]
}
})
是Ruby,顺便说一句。 MongoDB版本是4。
我得到:
unknown operator: $or
答案 0 :(得分:2)
您可以使用以下查询
db.collection.find({
text: { $exists: true },
$or: [{
tags: { $exists: false }
}, {
$expr: { $lt: [{ $size: '$tags' }, 2] }
}]
})
答案 1 :(得分:1)
要将MauriRamone的答案略微修改为较小的版本:
db.getCollection('test').find({
$and:[
{"text":{$exists:true} },
{$where: "!this.tags || this.tags.length < 2"}
]
})
但是,$where
速度较慢,应优先选择其他选项(例如Anthony's)。
您的原始查询无法正常工作,因为$or
仅适用于表达式,不适用于字段,并且您需要使用$expr
运算符来确定大小。
答案 2 :(得分:0)
尝试在查询中使用$ were,例如:
db.getCollection('test').find({
$and:[
{"text":{$exists:true} },
{
$or:[
{"tags":{$exists:false}},
{$where: "this.tags.length < 2"}
]
}
]
})
我正在使用Robomongo进行测试,您应该将查询格式化为Ruby。 问候。