MongoDB 是否提供查找或查询方法来根据任何字段值测试项目是否存在?我们只想检查是否存在,而不是返回项目的全部内容。
最佳答案
由于您不需要计数,因此您应该确保查询将在找到第一个匹配项后返回。由于count performance is not ideal ,这是相当重要的。以下查询应该完成:
db.Collection.find({ /* criteria */}).limit(1).size();
注意 find().count()
默认情况下 not 遵守 limit
子句,因此可能会返回意外结果(并且会尝试查找所有匹配项)。 size()
或 count(true)
将遵守限制标志。
如果你想走极端,你应该确保你的查询使用 covered indexes .覆盖索引仅访问索引,但它们要求您查询的字段已编入索引。一般来说,应该这样做,因为 count()
显然不返回任何字段。不过,覆盖索引有时需要相当冗长的游标:
db.values.find({"value" : 3553}, {"_id": 0, "value" : 1}).limit(1).explain();
{
// ...
"cursor" : "BtreeCursor value_1",
"indexOnly" : true, // covered!
}
很遗憾,count()
不提供explain()
,所以值得不值得一说。像往常一样,测量是比理论更好的伴侣,但理论至少可以让你摆脱更大的问题。
https://stackoverflow.com/questions/8389811/