应用$ setUnion mongoDB后排序字段

时间:2014-03-31 07:27:55

标签: mongodb

我有一个集合:

        {
"_id" : ObjectId("5338ec2a5b5b71242a1c911c"),
"people" : [ 
    {
        "name" : "Vasya"
    }, 
    {
        "age" : "30"
    }, 
    {
        "weight" : "80"
    }
],
"animals" : [ 
    {
        "dog" : "Sharick"
    }, 
    {
        "cat" : "Barsik"
    }, 
    {
        "bird" : "parrot"
    }
]},{
"_id" : ObjectId("5338ec7f5b5b71242a1c911d"),
"people" : [ 
    {
        "name" : "Max"
    }, 
    {
        "age" : "32"
    }, 
    {
        "weight" : "78"
    }
],
"animals" : [ 
    {
        "dog" : "Borbos"
    }, 
    {
        "cat" : "Murka"
    }, 
    {
        "bird" : "Eagle"
    }
]}

然后我将两个数组“人”和“动物”结合起来

db.tmp.aggregate({$project:{"union":{$setUnion:["$people","$animals"]}}})
问题中的

如何使每个记录数组的字段“结果”以单个顺序显示,而不是随机显示? 那就是:

1 个答案:

答案 0 :(得分:0)

希望我能找到引用(如果我可以添加它),但它基本上来自MongoDB的CTO,并且基本上(原文如此)“Set的被认为是订购的” 。从数学的角度来看, 是真的。

所以你偶然发现了当前(编写时)2.6发布候选系列中的一个新功能。但与它的$ addToSet对应物一样,来自$ setUnion的结果 set 以任何方式排序。

要做到这一点,你需要$ unwind和$ sort然后使用$ push再次$ group,就像你总是使用$ addToSet一样。当然,你需要一些公共密钥才能对此进行排序,而你的数据却没有。

更新:以下是quotehere is another