【问题标题】:MongoDB one query with multiple OR or multiple queries?MongoDB 一个查询具有多个 OR 或多个查询?
【发布时间】:2014-02-09 02:51:44
【问题描述】:

每个用户都有一个手机号码,我想查看我的通讯录中还有其他用户。

所以我有 1000 个号码,我想检查是否有任何号码在数据库中,所以我最初的想法是对每个号码运行一个 mongodb 查询:

for (var i=0; i < numbers.length; i++) {
  db.users.findOne({phoneNumber: numbers[i]});
}

但是有人建议我这样做:

db.users.find($or: numbers.map(function(number){return {phoneNumber: number}}));
// That would result into a
// db.users.find($or:[{phoneNumber: "123"}, {phoneNumber: "234"}...])

现在这两个是等价的吗?第二种方式更贵吗?

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    使用$in 是查找phoneNumber 出现在numbers 中的文档的最简洁方法:

    db.users.find({phoneNumber: {$in: numbers}})
    

    【讨论】:

    • 显然如果numbers.length == 500至少需要30s
    • @haskellguy 是你自己的结果还是只是异端?无论如何,$in 将比 $or 更有效,因为后者是排他性的。主要的性能因素将是您在集合中的文档数组中有多少个数字,
    • $in 有什么样的复杂性?假设我在数组中有n 文档和m 元素?
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多