Mongo值在数组查询中的问题:$ not运算符不起作用,并且无法选择ObjectIds

时间:2012-04-17 06:02:19

标签: mongodb

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

我有两个问题,我将分别提出:

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

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

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

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

但是,我想通过测试没有橙色来选择这个文件:

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

为什么这不起作用?

(2)如果数组值为ObjectIds,我无法获取数组查询中的值:

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

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

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

有人可以提出我可能做错的事吗?

3 个答案:

答案 0 :(得分:6)

对于像您这样的简单案例,没有$not可行,您需要$ne

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

你的第二个应该(而且确实)对我有用,也许你使用了错误的数量。

答案 1 :(得分:3)

作为替代方案,您可以使用$不是这样的:

{ 
    "mylist" : {
        $not : { 
            $in : ["red"] 
        } 
    }
}

答案 2 :(得分:0)

var queryarray = ['red']
db.myCol.find({ mylist: { $nin: queryarray  } })