2011-10-31 50 views

回答

5

findOne()find()的别名,带有limit(-1)

您可以在源代码here中看到此内容。它相当于

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

-1实际上是相关的。下面是从wire protocol docs片段:

如果数字为负,则数据库将返回数 和关闭游标。

如果你去了壳型> db.collection.findOne(没有括号),你可以看到,功能也只是在外壳的辅助工具。

因此,“是findOne()只是一个帮手”

0

这几乎就像一个别名,但不是回报,你的列表,它会返回一个对象。

+0

findOne返回一个数组,而不是一个对象。 –

+0

哦,真的,头脑被困在了mongodb控制台里。 –

2

mongo tutorials ......

,表明我们在上一步中插入该文件是存在的,我们 可以做一个简单的findOne()操作来获得的第一个文档中 集合。此方法返回单个文档(而不是find()操作返回的 DBCursor),并且它对 有用,但只有一个文档,或者您只对 感兴趣。你不必处理光标。

1

方法MongoCollection::findOne将直接返回结果阵列和MongoCollection::find一个将返回一个MongoCursor实例即使它是一个单值的结果。

0

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

1

mongodb.org有一个performance test report他们在哪里比较findOne并找到。根据结果​​,findOne的速度似乎要快35-45%。

  • find_one(小,没有索引):

    几个数据从报告点989个行动/ s的

  • 发现(小,没有索引):554个行动/秒