如何sorting内部数组和mongoose中的元素

所以我正在尝试在mongoose中做一个半复杂的查询。 具体如下:

Event.findOne({ users: { $elemMatch: { user: someUserId, going: 1 }, sort: {createTime: -1} } } 

基本上我想要做的是find一个单一的事件,其用户数组中的用户匹配一个ID并参加。 我有用户数组中的每个用户的多个用户logging,所以我想find最近的一个,做到这一点,我想通过createTimesorting用户数组。 这是错误进入的地方,它只是返回undefined 。 当我不包括sortingfunction时,它工作得很好,有什么办法可以包含它吗?

这是我的Event对象的样子:

 { _id: 1, endTime: 1429060173865, createTime: 1429051773902, startTime: 1429052973865, description: 'some desc', creator: 2, users: [ { user: 1, status: 1, going: 1, createTime: 1429051773749, _id: 552d997d8e923847306e2c21 }, { user: 1, status: 1, going: 1, createTime: 1429051773922, _id: 552d997d8e923847306e2c25 }, { user: 1, status: 9, going: 0, createTime: 1429051773942, _id: 552d997d8e923847306e2c26 } ], destroyed: 0 } 

有没有办法使这个查询完全mongoose?

作为find的一部分,MongoDB无法对文档的数组字段进行sorting。 你可以定义一个虚拟的Mongoose来按照sorting顺序返回数组。 您也可以按sorting顺序维护数组,如下所示:

 > db.test.drop() // note: not in order when inserted > db.test.insert({ "_id" : 0, "users" : [ { "user" : 1, "going" : 1, "created" : 22 }, { "user" : 2, "going" : 1, "created" : 775 }, { "user" : 1, "going" : 1, "created" : 6432 } ] }) // insert user to array and sort as part of update > db.test.update({ "_id" : 0 }, { "$push" : { "users" : { "$each" : [{ "user" : 2, "going" : 1, "created" : 5532 }], "$sort" : { "created" : -1 } } } }) > > db.test.findOne() { "_id" : 0, "users" : [ { "user" : 1, "going" : 1, "created" : 6432 }, { "user" : 2, "going" : 1, "created" : 5532 }, { "user" : 2, "going" : 1, "created" : 775 }, { "user" : 1, "going" : 1, "created" : 22 } ] } 

这样,当您执行查找查询时,匹配文档中的数组已经按照所需的顺序排列。

您的查询未正确书写。 为了sorting你应该写在find的第三个参数:

 Event.findOne( { users: { $elemMatch: { user: someUserId, going: 1 }} }, null, { sort: {createTime: -1} }, function(err, event) { //your event here });