【问题标题】:Mongodb query, that returns documents that doesn't have a field specified in searched queryMongodb 查询,返回在搜索查询中没有指定字段的文档
【发布时间】:2016-11-12 14:36:14
【问题描述】:

我在 Mongo DB 中有以下文档。

{"brand" : "BMW", "year" : 2016, "color" : "red" }
{"brand" : "BMW", "year" : 2000, "color" : "white" }
{"brand" : "BMW", "year" : 2010 }

我想查询如下:

db.collection.find({ "brand" : "BMW", "color" : "red" })

并获得这个结果:

{"brand" : "BMW", "year" : 2016, "color" : "red" }
{"brand" : "BMW", "year" : 2010 }

由于查询指定了这个,所以返回了一辆红色汽车。

同时我想在相同的结果中,文档根本没有“颜色”字段(因为可能这辆车也是红色的,但文档中没有指定)。

是否有可能在单个查询中获得此结果?

我想使用 Spring Data for Mongo 进行此查询。

谢谢

【问题讨论】:

    标签: mongodb mongodb-query spring-data-mongodb


    【解决方案1】:

    您可以通过添加 $or 条件来简单地尝试这样 - colorredcolor 不是 exists

    db.collection.find({ "brand" : "BMW", $or: [ { "color": "red" }, { "color": { $exists: false } } ] })
    

    【讨论】:

      【解决方案2】:

      试试这个:

      > db.foo.find({$or : [ {"brand": "BMW"}, {$and: [ { "brand" : "BMW"}, {"color": {$exists: 1}}   ]} ] })
      { "_id" : ObjectId("58272b4279180900222235ea"), "brand" : "BMW", "year" : 2016, "color" : "red" }
      { "_id" : ObjectId("58272b4e79180900222235eb"), "brand" : "BMW", "year" : 2000, "color" : "white" }
      { "_id" : ObjectId("58272b5c79180900222235ec"), "brand" : "BMW", "year" : 2010 }
      >
      

      我专门查询具有 bmw 品牌的汽车或具有 bmw 品牌的汽车,并且它们也具有颜色字段。

      如果您需要查找特定颜色,可以在我上面的查询中更改这部分:

      {"color": {$exists: 1}}
      

      到:

      {"color": "something"}
      

      【讨论】:

      • 你的查询返回58272b4e79180900222235eb我猜作者不是这个意思。
      • @alfredopacino 我不确定你有什么设置,但我创建了一个集合,添加了他用作示例的文档,然后运行查询和该查询的结果。不知道你是怎么得到你得到的。
      • 我的意思是:58272b4e79180900222235eb是你的白色宝马,我认为作者不希望它出现在结果集中。
      • @alfredopacino 明白了。这就是为什么我添加了额外的信息,如果您想要比仅具有“颜色”字段的文档更具体,您可以在查询的“和”子句中更具体。感谢您的提问。
      【解决方案3】:

      如果我遇到问题:

      db.foo.find(
      {$or :[
              {"brand": "BMW","color" : "red"},
              {$and:[
                   { "brand" : "BMW"},
                   {"color": { $exists: false} }
              ]}
      ]})
      

      【讨论】:

        猜你喜欢
        • 2018-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多