Mongo聚合查询结果在较少的文档中排序

2024-05-05

我在查询我们的一个馆藏时遇到了一个奇怪的问题将结果聚合到另一个集合中 https://stackoverflow.com/a/25936760/1746118。我正在查询已执行某些操作的唯一用户,并在聚合查询中预测每个用户执行的操作计数。

var result = db.getCollection('user_actions').aggregate(
[
  {"$match":{"createdAt":{"$gte":1585161000000,"$lt":1585247340000}}},
  {"$group":{"_id":{"accountId":"$user.id"},"count":{"$sum":1}}},
  {"$sort": {"count": -1}},
  {"$project":{"_id":0,"count":"$count","accountId":"$_id.accountId"}}
]
)
db.getCollection('winners').insert(result.toArray())
db.getCollection('winners').find({}).count()

上述查询插入的结果12643新创建的集合中的文档。

我也尝试过查询允许磁盘使用 https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/#example-aggregate-method-external-sort and 光标初始批量大小值 https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/#example-aggregate-method-initial-batch-size以及。但是作为聚合管道输出的集合的统计数据保持不变,我也没有出现任何异常 https://stackoverflow.com/questions/22816083/mongo-aggregate-result-exceed-maximum-document-size.

{
    "ns" : "data.winners",
    "size" : 1121979,
    "count" : 12639,
    "avgObjSize" : 88,
    "storageSize" : 4096,
    "capped" : false,
    "wiredTiger" : {...},
    "nindexes" : 1,
    "totalIndexSize" : 4096,
    "indexSizes" : {
        "_id_" : 4096
    },
    "ok" : 1,
    "operationTime" : Timestamp(1585321431, 41),
    "$gleStats" : {...},
    "lastCommittedOpTime" : Timestamp(1585321431, 41),
    "$configServerState" : {...},
    "$clusterTime" : {...   }
}

这更像是一个情节设置,现在,当我删除sort从聚合查询,它会产生26397文档作为结果。我可以从这个结果中选取一些个人帐户,并验证这是否是我首先应该得到的正确结果(sorted此外)。我尝试过调查MongoDB 限制和阈值 https://docs.mongodb.com/manual/reference/limits/但无法真正找到与观察的关系。

数据库版本

db.version()
4.0.0

外壳细节

mongo -version
MongoDB shell version v4.2.1
git version: edf6d45851c0b9ee15548f0f847df141764a317e
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

Edit:值得一提的是,正如在评论中与 Valijon 讨论的那样,使用聚合管道中的另一个阶段来计算已处理的文档:

{"$count": "winners"}

使用和不使用都会产生相同的值 26397{"$sort": {"count": -1}} stage.


在我看来它不像排序内存限制 https://docs.mongodb.com/manual/reference/operator/aggregation/sort/#sort-memory-limit行为,因为根据文档,这会引发错误。


None

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

Mongo聚合查询结果在较少的文档中排序 的相关文章

随机推荐