【问题标题】:mongodb/mongoose The way to find an array of docs by ids. - Using $in or multiple findbyId?mongodb/mongoose 通过 id 查找文档数组的方式。 - 使用 $in 或多个 findbyId?
【发布时间】:2015-05-26 12:52:36
【问题描述】:

我想查找具有一组 id 的文档。我有两种方法可以做到这一点

  1. 使用find({_id:{$in:arr}} , callback)

  2. 使用多个findById,并使用一些异步代码包装器将它们一起执行。

我关心的是哪个更好?对于服务器端来说,第二个似乎需要更多的计算,但是数据库部分呢?

谢谢!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    这取决于您认为对您的系统来说是一项繁重的操作。选项 1 需要 1 个 DB 调用,而选项 2 需要多个(取决于您获取的数量)。

    无论如何,选项 1 似乎是一个更好的选择,因为它会返回一个游标,而您只是在对其进行迭代。至于选项 2,您需要多个 db 调用(可能在循环中进行),它将返回数据并关闭游标。

    选项 2 对您有益的唯一时间是当您只有一个值要查找或您有特殊索引而不仅仅是 $in 查询时。在属性 1、属性 2 上说索引。

    您可以参考this

    【讨论】:

    • 我猜你是对的。我之前不确定的是单个查找的性能与 $in 相对于多个 findbyids 的性能。 (我一直认为 findbyid 是特殊的,因为涉及到“id”) 现在我阅读了这个帖子:http://stackoverflow.com/questions/12483632/mongodb-via-mongoose-js-what-is-findbyid,findbyid 只是为了方便。而且正如您所指出的,使用选项 2 会有太多的数据库调用。我相信。稍等片刻,我会接受你的回答。
    • 哇! findOne 可能比 find().limit 慢,这让我很惊讶!我学习!谢谢赛义德!
    • 虽然使用猫鼬的回调函数内部没有游标,但我猜的思路是类似的。我肯定会选择 find。
    猜你喜欢
    • 2013-02-06
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    相关资源
    最近更新 更多