MongoDB - 效率如何?

时间:2014-02-04 15:50:26

标签: mongodb

我在mongodb中有一个集合users。我正在使用node / mongodb API。

如果我去了我的node.js:

var users = db.collection("users");

然后

users.findOne({ ... })

这是否具有惯用性和效率?

我想避免将所有用户加载到应用程序内存中。

2 个答案:

答案 0 :(得分:3)

在Mongo中,collection.find()会返回cursor,这是与您的查询匹配的结果的抽象表示。在通过调用cursor.next()迭代光标之前,它不会通过网络返回结果。在迭代之前,您可以调用cursor.limit(x)来限制允许返回的结果数。

collection.findOne()实际上只是collection.find().limit(1).next()的快捷版本。因此,永远不允许游标返回多于一个结果。

如前所述,collection对象本身是一个允许访问集合的外观,但它不包含任何实际文档在内存中。

findOne()非常有效,它确实是惯用的,尽管它在开发/调试中比在实际应用程序代码中更常用。它在CLI中非常有用,但真正的应用程序需要多少次从集合中获取任何一个文档?我能想到的唯一情况是,给定的查询只能返回一个文档(即有效的主键)。

进一步阅读: CursorsRead Operations

答案 1 :(得分:1)

是的,这应该只将一个用户加载到内存中。

集合对象就是这样,当你创建一个新的集合对象时它不会返回所有用户,只有当你使用findOne或者从{{的返回值中迭代一个游标时1}}。