猫鼬findOne()vs限制(1)

Ale*_*lls 3 mongoose mongodb node.js

对于Node.js使用MongoDB和Mongoose驱动程序,我想限制我在API中重复的代码量.

而不是做这样的事情:

var limit  = req.query.limit || -1;


if(limit === 1){

Model.findOne({})...

}
else{

Model.find({})...

}
Run Code Online (Sandbox Code Playgroud)

这样做会更好:

var limit  = req.query.limit || -1;
Model.find({}).limit(limit);
Run Code Online (Sandbox Code Playgroud)

所以我有两个问题:

(1)使用limit(1)是否与findOne()具有相同的效果,因为它是一个更有效的搜索,因为查询在找到第一个匹配后立即返回?

(2)限制(-1)或限制(0)是否对搜索没有限制?因为这样可以不重复代码.

谢谢

Cle*_*ath 6

limit(1)vs findOne()

  • find返回游标,而findOne返回确切的文档.
  • 使用find()+ limit()会更快,因为如果文件存在,findOne()将始终读取+返回文档.
  • find()只返回一个游标(或不返回),只在迭代游标时才读取数据.
  • find()有一个游标,因此您可以在mongo shell中使用explain()和查询来查看获胜计划以及有关查询执行的其他详细信息

限制(-1),限制(0)

  • limit()值为0(即.limit(0))相当于设置无限制.
  • 负限制类似于正限制,但在返回单批结果后关闭光标.

http://docs.mongodb.org/manual/reference/method/cursor.limit/

  • 我不明白,您什么时候才能__not__遍历要查询的单个文档?如果我想要文档中的单个字段(例如doc._id),那会更快吗?谢谢 (2认同)