我的mongo集合foo
有一系列文档,其中一些文档名为music
,其中一些文档包含值“Blues
”。
如果我想显示数组存在的所有记录并且它们不包含单词Blues
,为什么这不起作用(它似乎忽略了第一个标准)?
db.foo.find({
music: { $exists: true },
music: { $nin: ["Blues"] }
})
然而这样做:
db.foo.find({
music: {
$exists: true,
$nin: ["Blues"]
}
})
答案 0 :(得分:2)
由于
> var obj = {music: 1, music: 2};
> obj
Object {music: 2}
它也类似于
> var obj = {};
> obj.music = 1;
> obj.music = 2;
然后期望obj.music
以某种方式1
和2
。
答案 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
后者覆盖了之前的