【问题标题】:mongoDB ~ combining $exists / $nin?mongoDB ~ 结合 $exists / $nin?
【发布时间】:2016-08-24 09:49:35
【问题描述】:

我的 mongo 集合 foo 有一个文档选择,其中一些带有一个名为 music 的数组,其中一些包含一个值“Blues”。

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

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

但确实如此:

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    因为

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

    也类似

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

    然后期待obj.music 不知何故既是1 又是2

    【讨论】:

      【解决方案2】:

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

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

      考虑这个问题的最佳方式(尽管这取决于驱动程序和语言)是:

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

      后者覆盖前面的

      【讨论】:

        【解决方案3】:

        还没有尝试,但是你需要在查询中添加 $and。否则它只会应用最后一条语句。

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

        【讨论】:

        • 好主意,但应该是db.foo.find({$and: [{music : {$exists : true}}, {music : {$nin : ["Blues"]}}]}) :)
        • 是的,我没有尝试过代码,只是想指出问题是他缺少一个“$and”
        猜你喜欢
        • 1970-01-01
        • 2020-07-07
        • 2017-05-21
        • 2016-03-14
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        相关资源
        最近更新 更多