mongoDB~组合$ exists / $ nin?

时间:2016-08-23 10:08:49

标签: mongodb

我的mongo集合foo有一系列文档,其中一些文档名为music,其中一些文档包含值“Blues”。

如果我想显示数组存在的所有记录并且它们不包含单词Blues,为什么这不起作用(它似乎忽略了第一个标准)?

db.foo.find({
    music: { $exists: true },
    music: { $nin: ["Blues"] }
})  

然而这样做:

db.foo.find({ 
    music: { 
        $exists: true,
        $nin: ["Blues"]
    }
})   

3 个答案:

答案 0 :(得分:2)

由于

> var obj = {music: 1, music: 2};
> obj
Object {music: 2}

它也类似于

> var obj = {};
> obj.music = 1;
> obj.music = 2;

然后期望obj.music以某种方式12

答案 1 :(得分:1)

Haven没有尝试,但你需要添加$和你的查询。否则它只会应用最后一个语句。

db.foo.find ($and:[{music : {$exists : true}}, {music : {$nin : ["Blues"]}}}])

答案 2 :(得分:1)

由于编程语言中的结构规则。语法:

db.foo.find({
    music: { $exists: true },
    music: { $nin: ["Blues"] }
})

考虑这一点的最佳方式(虽然这取决于驱动程序和语言):

create an object with "music: { $exists: true }" and then add "music: { $nin: ["Blues"] }" to it

后者覆盖了之前的