【问题标题】:MongoDB returns different values from count() and find() for same filters对于相同的过滤器,MongoDB 从 count() 和 find() 返回不同的值
【发布时间】:2022-11-27 05:56:43
【问题描述】:

我正在运行 MongoDB 6.0.3 副本集。我有一系列产品,我想计算与我的过滤器匹配的产品数量。但是,当我运行 find() 时,我返回了大约 23 个结果,但是当我运行 count() 时,我得到了 706 个匹配文档的计数。这里可能是什么问题?

replicaset-01 [primary] mydb> db.products.find({company_name:"Acme", image:''}).count()
706
replicaset-01 [primary] mydb> db.products.find({company_name:"Acme", image:''}, {_id:1})
[
  { _id: ObjectId("636bd5459a8d7621aa490a03") },
  { _id: ObjectId("636bd5459a8d7621aa490b46") },
  { _id: ObjectId("636bd5459a8d7621aa490b0e") },
  { _id: ObjectId("636bd5459a8d7621aa490b4d") },
  { _id: ObjectId("636bd5459a8d7621aa4909a2") },
  { _id: ObjectId("636bd5459a8d7621aa490b06") },
  { _id: ObjectId("636bd5459a8d7621aa4909a3") },
  { _id: ObjectId("636bd5469a8d7621aa490c52") },
  { _id: ObjectId("636bd5469a8d7621aa490d12") },
  { _id: ObjectId("636bd5469a8d7621aa490c98") },
  { _id: ObjectId("636bd5459a8d7621aa490949") },
  { _id: ObjectId("636bd5459a8d7621aa4909e3") },
  { _id: ObjectId("636bd5459a8d7621aa490a80") },
  { _id: ObjectId("636bd5459a8d7621aa490b6d") },
  { _id: ObjectId("636bd5459a8d7621aa4909eb") },
  { _id: ObjectId("636bd5459a8d7621aa490b50") },
  { _id: ObjectId("636bd5469a8d7621aa490b93") },
  { _id: ObjectId("636bd5459a8d7621aa490940") },
  { _id: ObjectId("636bd5479a8d7621aa4911a1") },
  { _id: ObjectId("636bd5479a8d7621aa491070") }
]

【问题讨论】:

标签: mongodb mongodb-replica-set


【解决方案1】:

您的两个 mongosh 命令都按设计执行。

  • db.collection.find(...).count() 将提供find 的文档总数。
  • db.collection.find(...) 将打印第一个20文件。

这里可能令人惊讶且重要的一点(来自文档):

"Executing db.collection.find() in mongosh automatically iterates the cursor to display up to the first 20 documents. Type it to continue iteration."

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 2016-05-12
    • 2014-07-31
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多