猿问

findOne还是$in?关于开发中的数据查询效率

开发经常会有类似的需求:已知一组学生的_id,查找这组学生的name属性做一些操作,现有两种方法:
方法一
遍历_id数组,分别findOne查询数据库:
conststudentIds=['111','222','333',...]
studentIds.forEach(_id=>{
constname=db.student.findOne({_id}).name
console.log(name)
})
方法二
根据$in先查到所有学生信息,再遍历所有信息取到name属性:
conststudentIds=['111','222','333',...]
conststudentList=db.student.find({_id:{$in:studentIds}})
studentList.forEach(student=>{
console.log(student.name)
})
两种方法哪种查询效率比较高?是否和数据量有关?或者有更有效的方法?求指点
小怪兽爱吃肉
浏览 298回答 2
2回答

繁华开满天机

第一种方法就很明显是N+1即使使用了索引,效率也不会很高,第二种虽然说in的效率也不是很高,但是如果你要取出的数据量大的话,很明显in就很占优势,如果你只是取1条,那就第一种更快。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答