【问题标题】:What is the default ordering of Mongo distinct method?Mongo distinct 方法的默认顺序是什么?
【发布时间】:2021-04-10 12:51:47
【问题描述】:

我的库存收集如下:

{ "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] }
{ "_id": 2, "dept": "A", "item": { "sku": "111", "color": "blue" }, "sizes": [ "M", "L" ] }
{ "_id": 3, "dept": "B", "item": { "sku": "222", "color": "blue" }, "sizes": "S" }
{ "_id": 4, "dept": "A", "item": { "sku": "333", "color": "black" }, "sizes": [ "S" ] }

Mongo 文档指定不同的命令如下:

在单个字段中查找指定字段的不同值 收藏。 distinct 返回一个包含数组的文档 不同的价值观。

在dept字段和SKU字段上执行distinct时返回如下:

db.inventory.distinct( "dept" )

输出:[ "A", "B" ]

db.inventory.distinct( "item.sku" )

输出:[ "111", "222", "333" ]

这清楚地表明了不同的命令顺序,默认情况下取决于文档插入集合的顺序。

但理想情况下,数组字段上的不同字段(db.inventory.distinct( "sizes" ))应该返回["S", "M", "L"],但反过来又返回[ "M", "S", "L" ]

此行为仅在 _id 字段上添加默认索引,而没有其他字段索引。

对 mongo 独特实现的任何见解都会有所帮助。提前致谢。

PS:我的要求是集合 A 包含用户元数据(userId,password,createdDate),我在 A(userId 字段)上使用 distinct 并在另一个集合 B 中创建文档以保留每日快照订单等用户相关数据。 典型的 B 文档如下: { 日期:日期时间, userData: [{user0 的订单}, {user1 的订单} ... ] }

在月底,我需要汇总 users0 的订单数据。 用户元数据可以不断添加新用户,所有用户几乎都有日常订单活动。因此,mongo distinct 的默认排序在这里很重要。

【问题讨论】:

    标签: mongodb mongodb-query pymongo pymongo-3.x


    【解决方案1】:

    不保证返回的订单结果,所以你应该假设它是任意的。

    如果您需要特定顺序的结果,只需在查询中添加 .sort()

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多