MongoDB $按日期查找最大文档
MongoDB $lookup with max document by date
我有这样的电影架构
{
"_id" : string,
"name": string
}
我有这样的评论架构
{
"_id": string,
"comment": string,
"date": date,
"movieId": string
}
我只想对最后一个 date
进行审核 $lookup。一部电影可能有很多评论,所以只是加入并按日期排序不是一种选择。我试过 pipeline
但不知道如何获取最后日期。
我想在 _id
电影和 movieId
评论中加入。输出应该是这样的
{
"_id" : string,
"name": string,
"lastReview": [{
"_id": string,
"comment": string,
"date": date,
"movieId": string
}]
}
您可以执行以下操作。
这里我使用 Uncorrelated-sub-queries 来加入两个集合。我们可以在收集管道内进行聚合。 Sort
和 limit
的组合获得最新评论。
[
{
"$lookup": {
"from": "review",
"let": {
mid: "$_id"
},
"pipeline": [
{
$sort: {
date: -1
}
},
{
$limit: 1
},
{
$match: {
$expr: {
$eq: [
"$$mid",
"$movieId"
]
}
}
}
],
"as": "review"
}
}
]
我有这样的电影架构
{
"_id" : string,
"name": string
}
我有这样的评论架构
{
"_id": string,
"comment": string,
"date": date,
"movieId": string
}
我只想对最后一个 date
进行审核 $lookup。一部电影可能有很多评论,所以只是加入并按日期排序不是一种选择。我试过 pipeline
但不知道如何获取最后日期。
我想在 _id
电影和 movieId
评论中加入。输出应该是这样的
{
"_id" : string,
"name": string,
"lastReview": [{
"_id": string,
"comment": string,
"date": date,
"movieId": string
}]
}
您可以执行以下操作。
这里我使用 Uncorrelated-sub-queries 来加入两个集合。我们可以在收集管道内进行聚合。 Sort
和 limit
的组合获得最新评论。
[
{
"$lookup": {
"from": "review",
"let": {
mid: "$_id"
},
"pipeline": [
{
$sort: {
date: -1
}
},
{
$limit: 1
},
{
$match: {
$expr: {
$eq: [
"$$mid",
"$movieId"
]
}
}
}
],
"as": "review"
}
}
]