MongoDB 根据同一文档的两个字段的最大值排序
MongoDB sorting based on highest value of two fields of same document
我有一个 collection
,其中包含以下字段:
{
"_id": 1,
"latestActivity": "2015-12-23 12:30:00",
"activity": {
"activity1": "2015-12-23 12:25:00",
"activity2": "2015-12-23 12:20:00",
"activity3": "2015-12-23 12:30:00"
}
}
{
"_id": 2,
"latestActivity": "2015-12-23 12:34:00",
"activity": {
"activity1": "2015-12-23 12:22:00",
"activity2": "2015-12-23 12:27:00",
"activity3": "2015-12-23 12:34:00"
}
}
{
"_id": 3,
"latestActivity": "2015-12-23 12:45:00",
"activity": {
"activity1": "2015-12-23 12:45:00",
"activity2": "2015-12-23 12:23:00",
"activity3": "2015-12-23 12:26:00"
}
}
latestActivity
包含其他三个活动的最新时间戳。
现在我运行遇到的问题是我需要先比较第二个和第三个activity,得到其中最新的,然后根据那个对集合进行排序。
因此排序顺序为:1、3、2 因为对于 1:活动 1、3:activity 3,2:activity 2
是否可以使用一些查询来做到这一点?
不涉及性能主题,您正在寻找的查询是这样的:
db.collection.aggregate([ {
$project: {
"latestActivity":1,
"activity.count1": 1,
"activity.activity1": 1,
"activity.activity2": 1,
"activity.activity3": 1,
"activity.sort": {
$cond: {
if: {
$gt: [
"$activity.activity3",
"$activity.activity2"
]
},
then: "$activity.activity3",
else: "$activity.activity2"
}
}
}
},
{
$sort: {
"activity.sort": 1
}
},
{
$project: {
"latestActivity":1,
"activity.activity1": 1,
"activity.activity2": 1,
"activity.activity3": 1
}
}
])
您通过使用 $cond
表达式比较 activity2
和 activity3
以及 [=20=,在第一个投影 (activity.sort
) 中创建用于排序的临时字段] 越大,则创建一个省略 activity.sort 字段的新投影。
我有一个 collection
,其中包含以下字段:
{
"_id": 1,
"latestActivity": "2015-12-23 12:30:00",
"activity": {
"activity1": "2015-12-23 12:25:00",
"activity2": "2015-12-23 12:20:00",
"activity3": "2015-12-23 12:30:00"
}
}
{
"_id": 2,
"latestActivity": "2015-12-23 12:34:00",
"activity": {
"activity1": "2015-12-23 12:22:00",
"activity2": "2015-12-23 12:27:00",
"activity3": "2015-12-23 12:34:00"
}
}
{
"_id": 3,
"latestActivity": "2015-12-23 12:45:00",
"activity": {
"activity1": "2015-12-23 12:45:00",
"activity2": "2015-12-23 12:23:00",
"activity3": "2015-12-23 12:26:00"
}
}
latestActivity
包含其他三个活动的最新时间戳。
现在我运行遇到的问题是我需要先比较第二个和第三个activity,得到其中最新的,然后根据那个对集合进行排序。
因此排序顺序为:1、3、2 因为对于 1:活动 1、3:activity 3,2:activity 2
是否可以使用一些查询来做到这一点?
不涉及性能主题,您正在寻找的查询是这样的:
db.collection.aggregate([ {
$project: {
"latestActivity":1,
"activity.count1": 1,
"activity.activity1": 1,
"activity.activity2": 1,
"activity.activity3": 1,
"activity.sort": {
$cond: {
if: {
$gt: [
"$activity.activity3",
"$activity.activity2"
]
},
then: "$activity.activity3",
else: "$activity.activity2"
}
}
}
},
{
$sort: {
"activity.sort": 1
}
},
{
$project: {
"latestActivity":1,
"activity.activity1": 1,
"activity.activity2": 1,
"activity.activity3": 1
}
}
])
您通过使用 $cond
表达式比较 activity2
和 activity3
以及 [=20=,在第一个投影 (activity.sort
) 中创建用于排序的临时字段] 越大,则创建一个省略 activity.sort 字段的新投影。