我有一个MongoDB集合,其中包含此(简化)表单的文档
{
"_id": "Doc"
"created": NumberLong("1422526079335")
}
此外,此文档可能还有一个edited
字段
{
"_id": "Doc"
"created": NumberLong("1422526079335")
"edited": {
"date": NumberLong("1458128507498")
}
}
我需要的是获取这些文档子集的最新时间戳(created
和edited.date
之间),以匹配特定条件。
到目前为止,我所获得的是获取最新的created
时间戳
db.myCollection.aggregate([ { $match: { ... } },
{ $project: { _id:0, created: 1 } },
{ $group: { _id: 'latest', latest: { $max: '$created' } } }
])
返回
{ "_id" : "latest", "latest" : NumberLong("1422526079335") }
如何在上面的edited.date
逻辑中针对$max
整合检查?或者是另一种解决方案吗?谢谢你提前!
答案 0 :(得分:2)
试试这个脚本。这是一个简单的$max
运营商。
我在集合中有以下文件
{
"_id" : "Doc",
"created" : NumberLong(1422526079335),
"edited" : {
"date" : NumberLong(1458128507498)
}
}
{
"_id" : "Doc1",
"created" : NumberLong(1422526079335)
}
尝试运行以下查询:
db.doc.aggregate([
{
$match: { ... }
},
{
$project:{
latest:{ $max:["$created", "$edited.date"]}
}
}
])
输出将是:
{
"_id" : "Doc",
"latest" : NumberLong(1458128507498)
}
{
"_id" : "Doc1",
"latest" : NumberLong(1422526079335)
}
答案 1 :(得分:1)
你可以在上一个$ project管道中使用$ cond - lastModifedDate 制作技巧: - )
db.ill.aggregate([{
$project:{
lastModifedDate:{
$cond: {
if: { $gte: [ "$created", "$edited.date"] },
then: "$created", else: "$edited.date" }
}}}])