Mongodb 个查询,returns 个没有在搜索查询中指定字段的文档
Mongodb query, that returns documents that doesn't have a field specified in searched query
我在 Mongo 数据库中有以下文档。
{"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 }
返回了一辆红色汽车,因为查询指定了这个。
同时我想得到相同的结果,文档根本没有 'color' 字段(因为可能这辆车也是红色的,但文档中没有指定) .
是否可以在单个查询中获得此结果?
我想使用 Spring 数据进行此查询 Mongo。
谢谢
试试这个:
> 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"}
您可以通过添加 $or
条件来简单地尝试这样 - color
是 red
或 color
不是 exists
db.collection.find({ "brand" : "BMW", $or: [ { "color": "red" }, { "color": { $exists: false } } ] })
如果我遇到问题:
db.foo.find(
{$or :[
{"brand": "BMW","color" : "red"},
{$and:[
{ "brand" : "BMW"},
{"color": { $exists: false} }
]}
]})
我在 Mongo 数据库中有以下文档。
{"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 }
返回了一辆红色汽车,因为查询指定了这个。
同时我想得到相同的结果,文档根本没有 'color' 字段(因为可能这辆车也是红色的,但文档中没有指定) .
是否可以在单个查询中获得此结果?
我想使用 Spring 数据进行此查询 Mongo。
谢谢
试试这个:
> 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"}
您可以通过添加 $or
条件来简单地尝试这样 - color
是 red
或 color
不是 exists
db.collection.find({ "brand" : "BMW", $or: [ { "color": "red" }, { "color": { $exists: false } } ] })
如果我遇到问题:
db.foo.find(
{$or :[
{"brand": "BMW","color" : "red"},
{$and:[
{ "brand" : "BMW"},
{"color": { $exists: false} }
]}
]})