如何查找所有没有数组或小于数组的文档

时间:2019-05-10 16:12:36

标签: ruby mongodb mongodb-query

我正在尝试查找所有没有数组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

3 个答案:

答案 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。 问候。