2014-03-31 93 views
0

我有一个集合:排序字段

 { 
"_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"]}}}) 

的问题

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

回答

0

希望我能找到的报价(如果我可以,我将它添加),但它主要来自MongoDB中的CTO和实质上是(原文如此)“设置的是认为,责令” 。从数学的角度来看非常多,是真的。

所以,你已经偶然发现了当前(截至撰写)2.6版本候选系列中的一个新特性。但喜欢它的$ addToSet副本,由此产生的集合从$ setUnion将不是以任何方式排序。

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

更新:这里是quotehere is another

+0

谢谢尼尔,也许以后会不仅仅是一个简单的方法。 – timkit

+0

@timkit阅读标记为**的JIRA问题将无法解决**。对他们的评论来自CTO。这绝不会发生。 –