如果有这样的数据:
{
user: "max",
uploaded: <timestamp>,
updated: <timestamp>
}
{
user: "tim",
uploaded: <timestamp>
}
用户可以拥有不同的商品。现在我使用带有$ match + $ group的mongoDB聚合框架,如下所示:
aggregate([
{ $match: {"username": "foouser"}},
{ $group: {
...other items..
"last_active": max(updated) OR IF EMPTY max(uploaded)
}
]);
我想设置&#34; last_active&#34;到更新的最大时间戳,以获得用户对其所有项目的最后一个活动。但并非每个项目都有更新属性。也许在用户的任何元素中都有update-property。因此,如果max(已更新)为空,则应选择max(已上载)。
任何人都可以按小组顺序帮我解决这个问题吗?
答案 0 :(得分:1)
聚合管道在版本之间发生了很大的变化,因此建议您使用mongodb的最新稳定版本。
尝试组合$ max和$ setUnion运算符,如下所示:
db.Collection.aggregate([
{ $match: {"username": "foouser"}},
{ $group: {
...other items..
"last_active": { $max: { $setUnion: [ "$updated", "$uploaded" ] } }
}
]);
或$ ifNull和$ max:
db.Collection.aggregate([
{ $match: {"username": "foouser"}},
{ $group: {
...other items..
"last_active": { $max: { $ifNull: [ "$updated", "$uploaded" ] } }
}
]);