MongoDB findOne与使用$in和单个项目进行查找
我正在NodeJS服务上使用MongoClient。MongoDB findOne与使用$in和单个项目进行查找,mongodb,performance,find,Mongodb,Performance,Find,我正在NodeJS服务上使用MongoClient。 作为提高服务性能的一部分,我想确定在查询Mongo时,在处理单id和多id时是否应该采取不同的行动。 我当前的代码如下所示: collection.find({id:{$in:ids}}) 我想知道,如果我将代码拆分为单独处理单个id,是否会使性能更好,有点像这样: 如果ids.count==1 collection.findOne({id:ids.first}) 其他的 collection.find({id:{$in:ids}}
作为提高服务性能的一部分,我想确定在查询Mongo时,在处理单id和多id时是否应该采取不同的行动。
我当前的代码如下所示:
collection.find({id:{$in:ids}})
我想知道,如果我将代码拆分为单独处理单个id,是否会使性能更好,有点像这样:
如果ids.count==1
collection.findOne({id:ids.first})
其他的
collection.find({id:{$in:ids}})
end
根据NodeJS的MongoDB驱动程序,findOne被弃用,取而代之的是find()
已弃用,请改用find().limit(1).next(函数(err,doc){})
更重要的是,findOne()
是find().limit(1.toArray()
我强烈建议您在将其用于生产之前先查看是否有不推荐的内容在查询中使用explain()函数,以便比较执行时间。您可以从shell中这样做:db.collection.findOne({u id:“id”}).explain();谢谢@felix,我使用了
explain()
并运行了find({id:{$in:[some_id])
和find({id:some_id})
结果和相同的赢家计划!:)findOne
不是我这里的主要关注点。我正在讨论是否将find
与{id:{$in:[some_id]}一起使用
,这意味着数组只包含一项,而使用{id:some_id}
查找则会对性能产生任何影响。@Barakarizi如果要进行基准测试,则应避免使用不推荐的函数。我使用$in和不使用$in进行了测试,结果是绝对可比的(1ms和1ms)。与更好的方法相关:“使用你需要的”。因此我个人建议避免$in,因为它是比“更好/改进”速度更好的方法。我使用explain()来更好地理解获胜计划(mongo)实际上,这是同一个获胜计划,因此我决定不采用单/多方法进行分离。看起来findOne不再被弃用了。