6

我正在尝试选择一个不包含文档数组中的值的文档。

我有两个问题,我将分别介绍:

(1) 我无法让 $not 运算符处理数组中的值查询:例如,如果我的集合中有以下文档:

{ _id: ObjectId("000000000000000000000000"), mylist: [ "red", "green", "blue" ] }

我可以使用以下方法选择此文档:

db.myCol.find({mylist:"red"})

但是,我想通过测试是否没有橙色来选择此文档:

db.myCol.find({$not:{mylist:"orange"}})

为什么这不起作用?

(2) 如果数组值是 ObjectId,我无法使数组查询中的值起作用:

{ _id: Object("000000000000000000000000"), mylist: [ ObjectId("111111111111111111111111") ] }

以下内容不会检索此文档:

myCol.find({mylist:ObjectId("111111111111111111111111")})

有人可以建议我可能做错了什么吗?

4

3 回答 3

6

没有$not这样的作品,你想要$ne像你这样的简单案例:

db.myCol.find({ mylist: { $ne: 'orange' } })

你的第二个应该(并且确实)对我来说很好,也许你使用了错误的数量。

于 2012-04-17T06:33:18.850 回答
3

作为替代方案,您可以像这样使用 $not:

{ 
    "mylist" : {
        $not : { 
            $in : ["red"] 
        } 
    }
}
于 2013-01-23T11:06:12.860 回答
0
var queryarray = ['red']
db.myCol.find({ mylist: { $nin: queryarray  } })
于 2017-06-22T08:01:38.550 回答