我有一个集合,其中元素有一个对象列表。我想在每个文档所包含的对象列表的第一个元素的特定字段上使用$orderBy
。
例如: 每个文档代表一个用户,每个用户都有一个会话列表。我想在列表的第一个会话中存储的日期对用户进行排序。
也许像{ $orderby: { "sessions[0].timestamp" : 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") } ]
}