【发布时间】:2011-07-06 05:21:59
【问题描述】:
如何进行多个 $or 操作?到目前为止,我已经尝试了以下方法,但它默默地忽略了第二个 $or。
{
$or: [{a: 2}, {a: 3}],
$or: [{b: 5}, {b: 4}]
}
我认为这是因为我使用了两个相同的键。有没有办法解决这个问题?
【问题讨论】:
如何进行多个 $or 操作?到目前为止,我已经尝试了以下方法,但它默默地忽略了第二个 $or。
{
$or: [{a: 2}, {a: 3}],
$or: [{b: 5}, {b: 4}]
}
我认为这是因为我使用了两个相同的键。有没有办法解决这个问题?
【问题讨论】:
Mongo 2.0 添加了 $and 运算符,因此您可以进行如下查询:
db.things.find({$and: [{$or : [{'a':1},{'b':2}]},{$or : [{'a':2},{'b':3}]}] })
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and
【讨论】:
对于sql中的多个like,我们使用$in,对于not,我们使用$nin vc 是我们这里的集合名称。我们发现那些字符串包含 cpu 或 memo。
db.collection('vc').find({ "name" : { $in: [ /cpu/, /memo/ ] } }
【讨论】:
您不能嵌套多个 $or 语句。
这在此处记录:
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or
除此之外:您的查询确实很有意义。
如果您尝试查询 a 是否为 2 或 3 而 b 是否为 5 或 4:
{a : {$in : [2,3]}, b: {$in : [4,5 ]} }
请不要尝试发明新语法。
【讨论】:
$or 可能不合法,但它们彼此相邻,而不是嵌套。
$and 不会做这项工作,因为如果第一个失败,第二个 $or 将不会验证。
来自 Mongo 手册页:
$and 运算符使用短路求值。如果第一个表达式(例如 )的计算结果为 false,MongoDB 将不会计算剩余的表达式。
嵌套的 $or 应该可以解决问题:
db.things.find({$or: [{$or : [{'a':1},{'b':2}]},{$or : [{'a':2}, {'b':3}]}] })
【讨论】: