MongoCollection findOne vs find

时间:2011-10-31 19:49:09

标签: php mongodb

我想知道MongoCollection::findOne是否有一些改进,或者只是对MongoCollection::find的“别名”或“shorcut”,例如限制为1。

谢谢

6 个答案:

答案 0 :(得分:5)

findOne()find()的别名limit(-1)

您可以在源代码here中看到这一点。它相当于

find(...).limit(-1).getNext()

-1实际上是相关的。以下是wire protocol docs

的摘录
  

如果数字为负数,则数据库将返回该数字   并关闭光标。

如果你转到shell并输入> db.collection.findOne (没有parens),你可以看到该函数也只是shell中的一个帮助器。

所以,“是findOne()只是一个帮手”

答案 1 :(得分:2)

来自mongo tutorials ...

  

要显示我们在上一步中插入的文档是否存在,   我们可以做一个简单的findOne()操作来获取第一个文档   集合。此方法返回单个文档(而不是   DBCursor表示find()操作返回),它对于有用   那些只有一个文件的东西,或者你只对它感兴趣的东西   首先。您不必处理光标。

答案 2 :(得分:1)

MongoCollection::findOne方法将直接返回结果数组,而MongoCollection::find方法将返回MongoCursor实例,即使它是单值结果。

答案 3 :(得分:1)

mongodb.org有一个performance test report,他们比较了findOne和find。根据结果​​,findOne似乎要快35-45%。

报告中的数据点很少:

  • find_one(小,没有索引):989 Ops / s
  • 找(小,没有索引):554 Ops / s

答案 4 :(得分:0)

它几乎就像一个别名,但它不是返回一个列表,而是返回一个对象。

答案 5 :(得分:0)

这取决于您的搜索查询。例如,如果您按ID搜索,因为ID是唯一的,因此不需要限制结果,因为只能找到一个结果。如果找到多个记录,那么它会将结果限制为1.另一个区别是findOne返回一个数组,而find返回一个mongoCursor。