gpt4 book ai didi

mongodb - 如何匹配 MongoDB 中的子文档数组?

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

仅当同一文档包含等于某个值的字段时,如果子文档数组中的值大于某个值,则匹配文档

我有一个集合,其中包含带有子文档数组的文档。这个子文档数组包含一个字段,该字段指示我是否可以根据子文档中的另一个字段过滤集合中的文档。当您看到文档的示例时,这会更有意义。

    {  
"_id":"ObjectId('XXX')",
"Data":{
"A":"",
"B":"-25.78562 ; 28.35629",
"C":"165"
},
"SubDocuments":[
{
"_id":"ObjectId('XXX')",
"Data":{
"Value":"XXX",
"DataFieldId":"B"
}
},
{
"_id":"ObjectId('XXX')",
"Data":{
"Value":"",
"DataFieldId":"A"
}
},
{
"_id":"ObjectId('XXX')",
"Data":{
"Value":"105",
"DataFieldId":"Z"
}
}
]
}

我只想匹配包含子文档且 DataFieldId 等于 Z 的文档,但仅当数据字段 ID 等于 Z 时才过滤大于 105 的值。

最佳答案

尝试如下:

db.collection.aggregate([
{
$project: {
_id:1,
Data:1,
filteredSubDocuments: {
$filter: {
input: "$SubDocuments",
as: "subDoc",
cond: {
$and: [
{ $eq: ["$$subDoc.Data.DataFieldId", "Z"] },
{ $gte: ["$$subDoc.Data.Value", 105] }
]
}
}
}
}
}
])

结果响应将是:

{
"_id" : ObjectId("5cb09659952e3a179190d998"),
"Data" : {
"A" : "",
"B" : "-25.78562 ; 28.35629",
"C" : "165"
},
"filteredSubDocuments" : [
{
"_id" : "ObjectId('XXX')",
"Data" : {
"Value" : 105,
"DataFieldId" : "Z"
}
}
]
}

关于mongodb - 如何匹配 MongoDB 中的子文档数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652522/

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