我在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 进行此查询。
由于
答案 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
条件来尝试这样做 - color
为red
或color
而不是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} }
]}
]})