有没有办法将$ addToSet的结果作为排序数组?
我尝试扩展管道和$展开数组,对其进行排序并再次对其进行分组, 但结果仍然没有排序。
数组非常大,我试图避免在应用程序中对它们进行排序。
Document Example : { "_id" : ObjectId("52a84825cc8391ab188b4567"), "id" : 129624 "message" : "Sample", "date" : "12-09-2013,17:34:34", "dt" : ISODate("2013-12-09T17:34:34.000Z"), }
查询:
db.uEvents.aggregate( [ {$match : {dt : {$gte : new Date(2014,01,01) , $lt : new Date(2015,01,17)}}} ,{$sort : {dt : 1}} , {$group : { _id : { id : "$id" , year : {'$year' : "$dt"} , month : {'$month' : "$dt"} , day : {'$dayOfMonth' : "$dt"} } ,dt : {$addToSet : "$dt"} }} ] );
答案 0 :(得分:20)
是的,这是可能的,但采取不同的方式。我只是为此提供我自己的数据,但你会得到这个概念。
我的样本:
{ "array" : [ 2, 4, 3, 5, 2, 6, 8, 1, 2, 1, 3, 5, 9, 5 ] }
我将对此进行“半引用”CTO并声明集被视为无序。
有一个真正的JIRA,谷歌团体声明就是这样的。所以让我们从“Elliot”中接受它,并接受这个将成为案例。
因此,如果你想要一个有序的结果,你必须用这样的阶段按摩
db.collection.aggregate([
// Initial unwind
{"$unwind": "$array"},
// Do your $addToSet part
{"$group": {"_id": null, "array": {"$addToSet": "$array" }}},
// Unwind it again
{"$unwind": "$array"},
// Sort how you want to
{"$sort": { "array": 1} },
// Use $push for a regular array
{"$group": { "_id": null, "array": {"$push": "$array" }}}
])
然后做任何事情。但是现在您的数组已经排序了。