13

实现一个应用程序,从大约 10 个电子邮件 ID 的列表中查找邮件 ID 存在的表。尝试使用 $or 和 $in。

$in 似乎提供了更好的性能,但并不重要。一个比另一个更优化吗?

4

4 回答 4

30

MongoDB 文档有答案

“当将 $or 与对同一字段的值进行相等检查的 <expressions> 一起使用时,请选择 $in 运算符而不是 $or 运算符。”

于 2013-02-06T21:11:40.307 回答
8

$or运算符是逻辑运算符,您可以在其中定义自己的登录名,但$in运算符是比较运算符,您可以在其中进行比较,但不能使用逻辑。

的语法$in

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }

例子:

db.account.find( { qty: { $in: [ 5, 15 ] } } )

的语法$or

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

例子:

db.account.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )

注意:Account 是您的收藏名称

于 2016-10-15T18:33:10.137 回答
3

“虽然 "$or" 将始终有效,但请尽可能使用 "$in",因为查询优化器会更有效地处理它。”

此外,"$in" 具有更高的可读性。

参考:MongoDB:权威指南

于 2014-05-22T21:23:12.513 回答
0

好吧,如果您使用 $in,这将确保不会出现不确定性,但是我更喜欢将其格式化为 $ 或因为它将确保索引(可读性不会让我担心在我更喜欢使用的应用程序逻辑中处理应用程序的内存而不是 mongodb 服务器)

于 2019-03-02T10:45:46.513 回答