Mongoose findOne()vs limit(1)

n3schb8v  于 2023-05-13  发布在  Go
关注(0)|答案(1)|浏览(117)

使用MongoDB和Node.js的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)limit(-1)或limit(0)是否具有创建无限制搜索的效果?因为这样可以避免重复代码。

q5lcpyga

q5lcpyga1#

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/

相关问题