我有一个集合:
{
"_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 :(得分:0)
希望我能找到引用(如果我可以添加它),但它基本上来自MongoDB的CTO,并且基本上(原文如此)“Set的不被认为是订购的” 。从数学的角度来看, 是真的。
所以你偶然发现了当前(编写时)2.6发布候选系列中的一个新功能。但与它的$ addToSet对应物一样,来自$ setUnion的结果 set 将不以任何方式排序。
要做到这一点,你需要$ unwind和$ sort然后使用$ push再次$ group,就像你总是使用$ addToSet一样。当然,你需要一些公共密钥才能对此进行排序,而你的数据却没有。
更新:以下是quote和here is another。