我想知道MongoCollection::findOne
是否有一些改进,或者只是对MongoCollection::find
的“别名”或“shorcut”,例如限制为1。
谢谢
答案 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%。
报告中的数据点很少:
答案 4 :(得分:0)
它几乎就像一个别名,但它不是返回一个列表,而是返回一个对象。
答案 5 :(得分:0)
这取决于您的搜索查询。例如,如果您按ID搜索,因为ID是唯一的,因此不需要限制结果,因为只能找到一个结果。如果找到多个记录,那么它会将结果限制为1.另一个区别是findOne
返回一个数组,而find
返回一个mongoCursor。