我可以在mongodb查询中使用OR和AND的组合吗?
以下代码无法按预期工作
db.things.find({
$and:[
{$or:[
{"first_name" : "john"},
{"last_name" : "john"}
]},
{"phone": "12345678"}
]});
Run Code Online (Sandbox Code Playgroud)
数据库内容:
> db.things.find();
{ "_id" : ObjectId("4fe8734ac27bc8be56947d60"), "first_name" : "john", "last_name" : "hersh", "phone" : "2222" }
{ "_id" : ObjectId("4fe8736dc27bc8be56947d61"), "first_name" : "john", "last_name" : "hersh", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8737ec27bc8be56947d62"), "first_name" : "elton", "last_name" : "john", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8738ac27bc8be56947d63"), "first_name" : "eltonush", "last_name" : "john", "phone" : "5555" }
Run Code Online (Sandbox Code Playgroud)
在查询上面的查询时 - 我什么都没得到!
> db.things.find({$and:[{$or:[{"first_name" : "john"}, {"last_name" : "john"}]},{"phone": "12345678"}]});
>
Run Code Online (Sandbox Code Playgroud)
我正在使用mongo 1.8.3
its*_*oor 28
db.things.find( {
$and : [
{
$or : [
{"first_name" : "john"},
{"last_name" : "john"}
]
},
{
"Phone":"12345678"
}
]
} )
Run Code Online (Sandbox Code Playgroud)
AND取一个2个表达式的数组OR,phone.
OR采用2个表达式first_name,last_name的数组.
和
要么
电话号码.
注意:如果不起作用,请升级到最新版本的MongoDB.
Set*_*thO 11
我相信$和只支持MongoDB v2.0 +.我很惊讶控制台首先接受了这个表达方式.我将尝试重新创建我所拥有的1.8服务器.
还要检查10gen公司的高级查询文档的$and.
更新
我将示例数据输入到v1.8x和v2.0x MongoDB服务器中.该查询适用于v2.0x,并且在v1.8x上失败.这证实了我(和Miikka)怀疑问题与$and您的服务器版本有关.
我发现这是一个(可以说)聪明的解决办法在网络上点击这里.我希望这有帮助.
-SethO
Chi*_*hit 11
这可以通过以下方式实现(mongodb 3.4)
这是一个很好的例子
db.getCollection('tbl_menu_items').find({
$and : [
{ $or : [ { price : 0.99 }, { price : 1.99 } ] },
{ $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
]
} )
此查询将选择所有文档:
price字段值等于0.99或1.99,sale字段值等于true或qty字段值小于20.
以下是带有$或查询的$和condition的示例,例如匹配任何条件
考虑以下查询......
db.getCollection('tbl_menu_items').find(
{ '$or':
[ { '$and':
[ { location: { '$in': [ ObjectId("588054c63879f2e767a1d553") ] } },
{ is_ryward: 1 },
{ points_reqiured_to_redeem_reward: { '$lte': 500 } } ] },
{ '$and':
[ { location: { '$in': [ ObjectId("588054c63879f2e767a1d553") ] } },
{ is_freebie: 1 } ] } ] }
)
此查询将选择所有文档:
位置数组在588054c63879f2e767a1d553和is_ryward = 1并且points_reqiured_to_redeem_reward <500
要么
位置数组在588054c63879f2e767a1d553和is_freebie中
使用隐式AND运算更短:
db.things.find({
$or : [
{"first_name": "john"},
{"last_name": "john"}
],
"phone": "12345678"
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54578 次 |
| 最近记录: |