alo*_*n_r 12 mongodb aggregation-framework
有没有办法将$ 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"} }} ] );
Nei*_*unn 27
是的,这是可能的,但采取不同的方式.我只是为此提供我自己的数据,但你会得到这个概念.
我的样本:
{ "array" : [ 2, 4, 3, 5, 2, 6, 8, 1, 2, 1, 3, 5, 9, 5 ] }
Run Code Online (Sandbox Code Playgroud)
我将在此基础上"半引用"CTO并声明集合被认为是无序的.
有一个真正的JIRA,谷歌团体声明就是这样的.因此,让我们把它从"长尾"和接受,这将是这种情况.
因此,如果你想要一个有序的结果,你必须按照这样的阶段按摩
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" }}}
])
Run Code Online (Sandbox Code Playgroud)
然后做任何事情.但现在您的数组已排序.
归档时间: |
|
查看次数: |
7306 次 |
最近记录: |