Arv*_*ngh 4 mongodb mongodb-query aggregation-framework
如何在下面的文档中获得最大的sections.Id,其中collection._id = some parameter
{
"_id" : ObjectId("571c5c87faf473f40fd0317c"),
"name" : "test 1",
"sections" : [
{
"Id" : 1,
"name" : "first section"
},
{
"Id" : 2,
"name" : "section 2"
},
{
"Id" : 3,
"name" : "section 3"
}
}
Run Code Online (Sandbox Code Playgroud)
我在下面试过
db.collection.aggregate(
[
{
"$match": {
"_id": ObjectId("571c5c87faf473f40fd0317c")
}
},
{
"$group" : {
"_id" : "$_id",
"maxSectionId" : {"$max" : "$sections.Id"}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
但是它不是返回 max int 单个值,而是返回部分数组中所有 Id 的数组。
在 node.js 中执行进一步相同的查询时,它返回一个空数组。
Ash*_*shh 11
您可以使用简单的$project舞台
就像是 this
db.collection.aggregate([
{ "$project": {
"maxSectionId": {
"$arrayElemAt": [
"$sections",
{
"$indexOfArray": [
"$sections.Id",
{ "$max": "$sections.Id" }
]
}
]
}
}}
])
Run Code Online (Sandbox Code Playgroud)
您的聚合查询需要$unwind opennig 到"sections"数组
添加您的聚合查询
{$unwind : "$sections"}
Run Code Online (Sandbox Code Playgroud)
和你这样的重构聚合查询
db.collection.aggregate(
[
{$unwind : "$sections"},
{
"$match": {
"_id": ObjectId("571c5c87faf473f40fd0317c")
}
},
{
"$group" : {
"_id" : "$_id",
"maxSectionId" : {"$max" : "$sections.Id"}
}
}
]);
Run Code Online (Sandbox Code Playgroud)
以及更多知识$unwind :https : //docs.mongodb.org/manual/reference/operator/aggregation/unwind/
| 归档时间: |
|
| 查看次数: |
6741 次 |
| 最近记录: |