Mongodb Mongo distinct方法的默认顺序是什么?

Mongodb Mongo distinct方法的默认顺序是什么?,mongodb,mongodb-query,pymongo,pymongo-3.x,Mongodb,Mongodb Query,Pymongo,Pymongo 3.x,我的库存收集如下: { "_id": 1, "dept": "A", "item": { "sku": "111", "color": "red" }, "sizes": [ "S", "M" ] } { "_id": 2, "dept":

我的库存收集如下:

{ "_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" ] }
db.inventory.distinct( "dept" )
Mongo文档指定了不同的命令,如下所示:

{ "_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" ] }
db.inventory.distinct( "dept" )
在单个字段中查找指定字段的不同值 收集distinct返回包含 不同的价值观

在执行distinct On dept字段和SKU字段时,返回如下结果:

{ "_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" ] }
db.inventory.distinct( "dept" )
输出:
[“A”,“B”]

输出:
[“111”、“222”、“333”]

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

但是数组中的distinct字段(如sizes)理想情况下(
db.inventory.distinct(“sizes”)
)应该返回
[“S”、“M”、“L”]
,但反过来又返回
[“M”、“S”、“L”]

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

任何关于mongo独特实现的见解都是有帮助的。提前谢谢

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

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

返回的顺序结果不能保证,因此您应该假设它是任意的


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

不能保证返回的顺序结果,因此您应该假设它是任意的


如果您需要按特定顺序显示结果,只需在查询中添加一个
.sort()

请提供上述信息的来源,以便关闭查询。谢谢,请提供上述信息的来源,以便关闭。谢谢