检查mongodb doc存在的最快方法是什么?
我应该只使用find而不返回任何内容吗?
编辑:
collection.findOne {#attribute}, (err, doc) ->
if err then console.log err
if interaction
#exists
else
#does not
答案 0 :(得分:3)
如果您只是测试单个文档,请使用findOne
(或驱动程序中的等效文档);大多数驱动程序以最有效的方式实现这一点(通过在请求上设置负限制1,要求mongo在找到一个文档后立即返回,即使更多可能匹配,也不要创建永远不会的游标由客户使用)。
如果您有可以为查询提供服务的索引,则可以使用field selection选择索引中的字段(的一部分);这将利用Mongo的“覆盖索引”功能来避免查找底层集合数据。除非您的索引中包含{_id: 0}
,否则请务必在字段选择器中设置_id
。
答案 1 :(得分:0)
涵盖指数就是您想要的。如果您对该文档的了解信息已编制索引,则可以使用此工具仅从索引中查询和检索信息(在RAM中),并且不会转到磁盘以获取参考文档。 Explained in the mongo docs here
答案 2 :(得分:0)
http://www.mongodb.org/display/DOCS/mongo%20wire%20protocol#MongoWireProtocol-OPQUERY
numberToReturn:将第一个CONTRIB:OP_REPLY消息中的文档数限制为查询。但是,如果结果多于numberToReturn,数据库仍将建立游标并将cursorID返回给客户端。如果客户端驱动程序提供“限制”功能(如SQL LIMIT关键字),则由客户端驱动程序确保将不超过指定数量的文档返回给调用应用程序。如果numberToReturn为0,则db将使用默认的返回大小。如果数字为负数,则数据库将返回该数字并关闭光标。无法获取该查询的进一步结果。如果numberToReturn为1,服务器会将其视为-1(自动关闭光标)。