Mongodb查询,返回没有在搜索查询

时间:2016-11-12 14:36:14

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

我在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 }

由于查询指定了此车,因此返回了红色汽车。

与此同时,我希望得到相同的结果,那些没有颜色的文件。字段根本(因为这辆车也可能是红色的,但未在文件中指明)。

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

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

由于

3 个答案:

答案 0 :(得分:0)

试试这个:

> 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 }
>

我特别询问品牌宝马的汽车或品牌宝马的汽车,他们也有色域。

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

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

为:

{"color": "something"}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果我遇到问题:

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