gpt4 book ai didi

mongodb - 在所有文档中查找数组中的最新条目

转载 作者:可可西里 更新时间:2023-11-01 10:26:26 27 4
gpt4 key购买 nike

我有多个文档,其中包含一个对象数组。我怎样才能在数组中找到最新的条目,但在所有文档中。例如:

{
doctitle: “some title”,
conditions: [
{
createdAt: ISODate("2014-12-21T13:59:26Z"),
title: “some title 1”
},
{
createdAt: ISODate("2014-12-22T13:59:26Z"),
title: “some title 2”
}
]
},
{
doctitle: “other title”,
conditions: [
{
createdAt: ISODate("2014-12-20T13:59:26Z"),
title: “some title 3”
},
{
createdAt: ISODate("2014-12-23T13:59:26Z"),
title: “some title 4”
}
]
}

我想找到最新的 3 个条件。它应该只输出带有 docTitle 和找到的一个条件的每个文档。

{
docTitle: "other title" ,
condition: [
{
createdAt: ISODate("2014-12-23T13:59:26Z"),
title: “some title 4”
}
]
},
{
docTitle: "some title" ,
condition: [
{
createdAt: ISODate("2014-12-22T13:59:26Z"),
title: “some title 2”
}
]
},
{
docTitle: "some title" ,
condition: [
{
createdAt: ISODate("2014-12-21T13:59:26Z"),
title: “some title 1”
}
]
}

最佳答案

使用以下聚合管道执行初始 $unwind 运算符通过条件数组字段“非规范化”文档,以便每个输出文档用元素值替换数组。对于每个输入文档,输出 n 个文档,其中 n 是数组元素的数量,对于空数组可以为零。

下一个流水线步骤使用 $sort 运算符通过嵌入的 createdAt 字段重新排序文档,这是接下来几个管道步骤所必需的,即 $limit $group 运营商。

由于您只需要按 createdAt 字段降序排列的前三个文档, $limit 通过将未修改的前 3 个文档传递到指定限制为 3 的管道,可以为您做到这一点。

前面的 $group 管道阶段是您通过使用 $first 派生“doctitle”字段的地方。 并通过 $push 修改条件数组 累加器运算符,当您按 createdAt 字段作为键对文档进行分组时。

流水线的最后一步 $project 从先前的管道流中删除 _id 字段,因此最终管道将如下所示:

db.collection.aggregate([
{ "$unwind": "$conditions" },
{ "$sort": { "conditions.createdAt": -1 } },
{ "$limit": 3 },
{
"$group": {
"_id": "$conditions.createdAt",
"doctitle" : { "$first": "$doctitle" },
"conditions": { "$push": "$conditions" }
}
},
{
"$project": {
"_id": 0, "doctitle": 1, "conditions": 1
}
}
])

示例输出:

/* 0 */
{
"result" : [
{
"doctitle" : "some title",
"conditions" : [
{
"createdAt" : ISODate("2014-12-21T13:59:26.000Z"),
"title" : "some title 1"
}
]
},
{
"doctitle" : "some title",
"conditions" : [
{
"createdAt" : ISODate("2014-12-22T13:59:26.000Z"),
"title" : "some title 2"
}
]
},
{
"doctitle" : "other title",
"conditions" : [
{
"createdAt" : ISODate("2014-12-23T13:59:26.000Z"),
"title" : "some title 4"
}
]
}
],
"ok" : 1
}

关于mongodb - 在所有文档中查找数组中的最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33596909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com