2014-05-25 37 views
0
/* 0 */ 
{ 
    "_id" : ObjectId("5380c9e097632cee5b000007"), 
    "month" : "5", 
    "userid" : "53806aac12c75f4b51000001", 
    "__v" : 7, 
    "posts" : [{ 
     "postid" : ObjectId("538185cae0c6b8666e000008"), 
     "ts" : ISODate("2014-05-25T05:55:22.976Z"), 
     "userid" : "53806aac12c75f4b51000001", 
     "name" : "BBB", 
     "text" : "b1", 
    }] 
} 

/* 1 */ 
{ 
    "_id" : ObjectId("5380c80e97632cee5b000001"), 
    "month" : "5", 
    "userid" : "5380629ea3b31f864f000001", 
    "__v" : 24, 
    "posts" : [{ 
     "postid" : ObjectId("538185b2e0c6b8666e000004"), 
     "ts" : ISODate("2014-05-25T05:54:58.703Z"), 
     "userid" : "5380629ea3b31f864f000001", 
     "name" : "AAA", 
     "text" : "a1", 
    }, { 
     "postid" : ObjectId("538185b7e0c6b8666e000006"), 
     "ts" : ISODate("2014-05-25T05:55:03.474Z"), 
     "userid" : "5380629ea3b31f864f000001", 
     "name" : "AAA", 
     "text" : "a2", 

    }, { 
     "postid" : ObjectId("538185d6e0c6b8666e00000a"), 
     "ts" : ISODate("2014-05-25T05:55:34.231Z"), 
     "userid" : "5380629ea3b31f864f000001", 
     "name" : "AAA", 
     "text" : "a3", 
    }] 
} 

这是我的数据。如何在MongoDB中对这些数据进行排序?

我想为'Ts'(数据)排序此数据。

我想,排序清单由 'posts.Ts' 这样的..
名称:AAA,文本= A3
名称:BBB,文本= B1
名称:AAA,文本= A2
名称: AAA,text = a1

但我不知道如何查询这个。请与我联系

这是我在Node和mongoose中的代码。

db.collection('walls', function(err, collection) { 

collection.find(function(err, data) { 

collection.aggregate(
{$match: {userid:userid}}, 
{$project: {posts: 1,_id:0}}, 
{$sort:{'posts.ts':1}}, 
{$unwind: "$posts"} 
)} 

...

回答

0

您是在正确的原则,但你必须围绕管道阶段走错了路。排序前需要$unwind阵列:

db.collection.aggregate([ 
    { "$match": { "userId": userId" } }, 
    { "$project": { "_id": 0, "posts": 1 } }, 
    { "$unwind": "$posts" }, 
    { "$sort": { "posts.ts": 1, "posts.name": 1 } } 
]) 
相关问题