猫鼬findOne()vs限制(1)

时间:2015-10-12 00:09:21

标签: node.js mongodb mongoose

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

而不是做这样的事情:

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


if(limit === 1){

Model.findOne({})...

}
else{

Model.find({})...

}

这样做会更好:

var limit  = req.query.limit || -1;
Model.find({}).limit(limit);

所以我有两个问题:

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

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

感谢

1 个答案:

答案 0 :(得分:6)

limit(1)vs findOne()

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

limit(-1),limit(0)

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

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