gpt4 book ai didi

arrays - 根据同一文档中的另一个数组查询 Mongo 文档数组

转载 作者:行者123 更新时间:2023-12-03 15:59:15 25 4
gpt4 key购买 nike

我有以下格式的 Mongo 文档:

{
"_id":{
"$oid":"1237563648fe93j3b5"
},
"stage_id":{
"$oid":"1213241423nn552l54j"
},
"payload":[
{
"_data":{
"name":"name1",
"description":"",
"parent":"",
"status":"NOT READY"
}
},
{
"_data":{
"name":"name2",
"description":"MS Visio",
"parent":"A7704",
"status":"OPERATING"
}
},

{
"_data":{
"assetnum":"name3",
"description":"MS Visio",
"parent":"7127",
"status":"OPERATING"
}
}
],
"response":[
{
"_data":{
"Error":{
"message":"AVJPA - The record already exists.
"attrname":"name",
"reasonCode":"AVJPA",
"status":"400"
}
},
"_meta":{
"status":"400"
}
},
{
"_data":{
"Error":{
"message":"AVJPA - The record already exists.
"attrname":"name",
"reasonCode":"AVJPA",
"status":"400"
}
},
"_meta":{
"status":"400"
}
},
{
"_data":{
"message":"success"
},
"_meta":{
"status":"204"
}
}
]
}

有许多采用这种格式的文档。 response 数组是对 payload 数组中项目的响应,这些项目已发布到 API 端点。因此,响应数组中的 index 0 是负载数组中 index 0 负载的响应。现在我想过滤集合,并希望获取响应 reasonCode IS AVJPA 的有效负载。如何做到这一点?我使用以下代码来查找存在 Error 的响应,但不确定如何找到与响应相对应的有效负载。

logs.find({
"stage_id":1213241423nn552l54j
$elemMatch: {"_responsedata.Error": {$exists: true}}
})

其中logs是我的集合的名称。我正在 Python 中运行此代码并使用 PyMongo 客户端库。

最佳答案

检查这是否满足您的要求:

db.logs.aggregate([
{
$match: {
"stage_id": ObjectId("5a934e000102030405000001"),
"response": {
$elemMatch: {
"_data.Error": {
$exists: true
}
}
}
}
},
{
$addFields: {
tmp: "$payload"
}
},
{
$unwind: {
path: "$tmp",
includeArrayIndex: "idx",
preserveNullAndEmptyArrays: false
}
},
{
$match: {
$expr: {
$eq: [
{
$let: {
vars: {
input: {
$arrayElemAt: [
"$response",
"$idx"
]
}
},
in: "$$input._data.Error.reasonCode"
}
},
"AVJPA"
]
}
}
},
{
$group: {
_id: "$_id",
stage_id: {
$first: "$stage_id"
},
payload: {
$push: {
$arrayElemAt: [
"$payload",
"$idx"
]
}
},
response: {
$push: {
$arrayElemAt: [
"$response",
"$idx"
]
}
},

}
}
])

MongoPlayground

关于arrays - 根据同一文档中的另一个数组查询 Mongo 文档数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60429794/

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