gpt4 book ai didi

javascript - 如何使用 mongo 聚合遍历数组并返回所需的文档?

转载 作者:行者123 更新时间:2023-11-30 19:48:21 25 4
gpt4 key购买 nike

我有一个查询,需要按 ID 查找文档,然后我只需要返回数组中符合特定条件的项目。

在下面的代码中,您将看到我只需要通过 ID“匹配”一个文档,然后我将“限制”设置为一个(应该只有一个)。这是我真的很困惑......然后我“展开” fragments 字段,它是数组,数组内是子文档。我需要通过其中的数组的最后一项过滤掉这些子文档,因此我“转换”了 assignments_array 的“切片”。这是我只需要 assignments_array 为 EMPTY 或 assignment_history.to 为空的文档

db.getCollection('territories').aggregate([
{
"$match": {
"congregation": ObjectId("5c68c706f1f52047f08862b3")
}
},
{
"$limit": 1
},

{
$unwind: {
path: "$fragments"
}
},
{
$project: {
"fragments.number": 1,
"fragments.assignment_history": {"$slice": ["$fragments.assignment_history", -1]}
}
}

这让我得到了这个结果......

{
"_id": ObjectId("5c68c706f1f52047f08862b6"),
"fragments": {
"number": 1,
"assignment_history": [{
"to": ObjectId("5c68c706f1f52047f08862b4"),
"on": 1550370567067
}]
}
}
{
"_id": ObjectId("5c68c706f1f52047f08862b6"),
"fragments": {
"number": 2,
"assignment_history": []
}
}
{
"_id": ObjectId("5c68c706f1f52047f08862b6"),
"fragments": {
"number": 3,
"assignment_history": [{
"to": null,
"on": 1550370567067
}]
}
}

我需要以 2 个对象结束,其中 assignment_history.to 为 null,而 assignment_history 没有项目/长度。

最佳答案

您可以在 $unwind 之后再使用一个 $match 条件

db.getCollection('territories').aggregate([
{ "$match": { "congregation": ObjectId("5c68c706f1f52047f08862b3") }},
{ "$limit": 1 },
{ "$unwind": { "path": "$fragments" }},
{ "$match": {
"$or": [
{ "fragments.assignment_history.to": null },
{ "fragments.assignment_history.to": { "$exists": false }}
]
}},
{ "$project": {
"fragments.number": 1,
"fragments.assignment_history": { "$slice": ["$fragments.assignment_history", -1] }
}}
])

关于javascript - 如何使用 mongo 聚合遍历数组并返回所需的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54735203/

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