mongodb:$ orderBy在每个文档中包含的列表的第一个元素中的字段上

时间:2014-06-05 10:16:40

标签: mongodb sorting

我有一个集合,其中元素有一个对象列表。我想在每个文档所包含的对象列表的第一个元素的特定字段上使用$orderBy

例如: 每个文档代表一个用户,每个用户都有一个会话列表。我想在列表的第一个会话中存储的日期对用户进行排序。

也许像{ $orderby: { "sessions[0].timestamp" : 1 } }

这可能吗?

1 个答案:

答案 0 :(得分:1)

您要求的操作是.sort()的简单操作。也许你不知道MongoDB使用“点符号”

以下文件为最小例子:

{ 
    "name" : "Fred", 
    "sessions" : [ { "timestamp" : ISODate("2014-06-05T10:38:24.371Z") } ]
}
{ 
    "name" : "Barney",
    "sessions" : [ { "timestamp" : ISODate("2014-06-05T10:38:34.557Z") } ]
}

发出以下查询:

db.users.find({},{ _id: 0}).sort({ "sessions.0.timestamp": -1 })

通过数组的第一项,时间戳字段获取有序结果:

{
    "name" : "Barney",
    "sessions" : [ { "timestamp" : ISODate("2014-06-05T10:38:34.557Z") } ]
}

{ 
    "name" : "Fred", 
    "sessions" : [ { "timestamp" : ISODate("2014-06-05T10:38:24.371Z") } ]
}