如何查询 MongoDB 来测试某个项目是否存在?

2023-11-22

MongoDB 是否提供查找或查询方法来根据任何字段值测试某个项目是否存在?我们只想检查是否存在,而不是返回该项目的完整内容。


由于您不需要计数,因此您应该确保查询在找到第一个匹配项后返回。自从计数性能不理想,这一点相当重要。以下查询应该可以完成该任务:

db.Collection.find({ /* criteria */}).limit(1).size();

注意find().count()默认情况下not尊重limit子句,因此可能会返回意外的结果(并且会尝试查找所有匹配项)。size() or count(true)将遵守限制标志。

如果你想走极端,你应该确保你的查询使用覆盖索引。覆盖索引仅访问索引,但它们要求您查询的字段已建立索引。一般来说,这应该可以做到,因为count()显然不返回任何字段。尽管如此,覆盖索引有时需要相当详细的游标:

db.values.find({"value" : 3553}, {"_id": 0, "value" : 1}).limit(1).explain();

{
  // ...
  "cursor" : "BtreeCursor value_1",
  "indexOnly" : true,  // covered!
}

很遗憾,count()不提供explain(),所以值不值这个很难说。像往常一样,测量是比理论更好的伴侣,但理论至少可以让你避免更大的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查询 MongoDB 来测试某个项目是否存在? 的相关文章

随机推荐

  • 好友列表的 SQL 加入帮助

    我有三个数据库表 users user profiles and friends users id username password 用户个人资料 id user id 全名 friends id usera id userb id 查找
  • Android 中的 SQLiteDiskIOException

    我们正在获得大量SQLiteDiskIOException我们的 Android 应用程序中出现错误 堆栈跟踪类似于以下内容 E AndroidRuntime 2252 Caused by android database sqlite S
  • 反跨域策略的意义何在?

    为什么 HTML DOM 和 或 Javascript 的创建者决定禁止跨域请求 我可以看到禁止它的一些非常小的安全好处 但从长远来看 这似乎是一种使 Javascript 注入攻击威力更小的尝试 无论如何 对于 JSONP 来说 这都是没
  • 检测 UITableViewCell 何时超出范围

    如何检测 UITableViewCell 派生对象何时从表中删除并进入缓存 实施以下任一方法 当从表中删除时 superview 将变为 nil 当添加回表时 超级视图将被设置为表视图 void willMoveToSuperview UI
  • 如何向ListView添加子项?

    我正在尝试获取具有子项工作的列表视图的最简单的示例 但是这段代码 private void button1 Click object sender EventArgs e listView1 Groups Add new ListViewG
  • 使Python文件中的函数定义与顺序无关[重复]

    这个问题在这里已经有答案了 我使用Python CGI 在定义函数之前我无法调用它 在 Oracle PL SQL 中 有一个 前向声明 的技巧 将所有函数命名在顶部 因此定义的顺序并不重要 Python中也有这样的技巧吗 example
  • 如何在不使用for循环的情况下获取迭代中正在处理的当前元素的索引?

    我读过了如何使用索引位置迭代 Vec 答案是在哪里使用enumerate in a for loop 但如果我不使用for 这样循环 fn main let v vec 1 10 iter map x x 1 index lt collec
  • 解析时不进行字符串分割

    这是讨论的副产品其他一些问题 假设我必须解析大量很长的字符串 每个字符串包含一个序列doubles 当然 在文本表示中 由空格分隔 我需要解析double变成一个List
  • Heroku 新手:将我的应用程序推送到 Heroku 时出错 [重复]

    这个问题在这里已经有答案了 我使用的是 Ubuntu 10 04 通过遵循教程在这里 我已经创建了Heroku帐户 安装了GIT and Heroku成功地 我已上传 SSH 密钥并将 heroku 添加到我的系统 PATH 中 之后 我做
  • 为什么 python 中的 \n 给出两个空行?

    我不明白为什么 n 在输出中给出两个空行 例如 gt gt gt def my function print ABC print n print DEF gt gt gt my function ABC First blank line S
  • Gson Json 解析器 数组的数组

    想要解析一些 Json 并解析出数组的数组 不幸的是我不知道如何处理 json 中的嵌套数组 json type MultiPolygon coordinates 71 25 42 33 71 25 42 33
  • 使用幂运算 **0.5 的效率比 math.sqrt 低?

    引用自 Python 编程 计算机科学简介 我们可以取平方根 使用求幂 使用 math sqrt 效率更高一些 有点 但到什么程度 如何呢 理论上 哈马尔的回答 and 达菲莫的回答是很好的猜测 但实际上 在我的机器上 它是not更高效 g
  • 将 C 转换为 nasm 汇编

    我尝试将我的 C 代码转换为 GCC 汇编 通过输入 gcc S masm intel 或 pg c 或 gcc S prog c 但它给了我 MASM 代码 尽管我需要 NASM 代码 我想知道你是否可以帮我将我的 c 程序集转换为 NA
  • rake db:migrate 由于 rake 版本差异而被中止[重复]

    这个问题在这里已经有答案了 我收到错误 rake db migrate trace rake aborted You have already activated rake 10 1 1 but your Gemfile requires
  • 使用 Scala 2.10 反射如何列出 Enumeration 的值?

    有以下枚举 object ResponseType extends Enumeration val Listing Album Value 如何获取其值列表 如果您想彻底了解这一点 您需要检查您的符号是否具有Value作为超类型 def v
  • 如何从随机日期中得到下周四?

    我想做的是 你有一个随机日期列表 它永远不会相同 所以它必须是一个通用公式 但你可以得到任何日期 一年中的任何日期 然后每个星期四都是一个日期的开始新的一周 对于每个日期 您将日期设置为大于前一个且小于星期四的星期四 由于我含糊其辞 请举例
  • 从默认样式继承样式

    在我的项目中 文本框有一个自定义样式 它定义为 因此它默认应用于所有文本框子控件 我需要创建另一种基于默认样式的样式 但是如何在 BasedOn 属性中指定我的新样式应使用默认样式 使用您想要扩展的控件的类型 BasedOn StaticR
  • 使用Qt的QLabel点击事件?

    我是 Qt 新手 有一个问题 I have QLabel and QLineEdit对象 并且当QLabel单击文本 我想将此文本设置为QLineEdit 我也读过QLabel没有点击信号 你能解释一下我该如何做到这一点并为我编写代码吗 要
  • EntityCollection Clear() 和 Remove() 方法

    删除 EF 实体的所有集合项的正确方法是什么 在下面的代码中 DocumentItems 是文档的相关文档项的集合 此代码在 Clear 上继续 但在 SaveChanges 上失败 因为相关项目通过 FK 连接到其文档 并且 FK 是强制
  • 如何查询 MongoDB 来测试某个项目是否存在?

    MongoDB 是否提供查找或查询方法来根据任何字段值测试某个项目是否存在 我们只想检查是否存在 而不是返回该项目的完整内容 由于您不需要计数 因此您应该确保查询在找到第一个匹配项后返回 自从计数性能不理想 这一点相当重要 以下查询应该可以