MongoDB:将文档查找到嵌套数组中时投影$

马里奥·诺玛克(Mario Nommac)

我有以下“用户”集合的文档,其中包含两个嵌套数组:

{ 

    "person" : {
        "personId" : 78,
        "firstName" : "Mario", 
        "surname1" : "LOPEZ", 
        "surname2" : "SEGOVIA" 
    }, 
    "accounts" : [
        {
            "accountId" : 42,
            "accountRegisterDate" : "2018-01-04", 
            "banks" : [
                {
                    "bankId" : 1, 
                    "name" : "Bank LTD",                     
                },
                {
                    "bankId" : 2, 
                    "name" : "Bank 2 Corp",                     
                }
            ]
        }, 
        {
            "accountId" : 43, 
            "accountRegisterDate" : "2018-01-04", 
            "banks" : [
                {
                    "bankId" : 3, 
                    "name" : "Another Bank",                     
                },
                {
                    "bankId" : 4, 
                    "name" : "BCT bank",                     
                }
            ]
        }
    ]
}

我正在尝试获取一个查询,该查询将找到此文档并仅在输出中获得此子文档:

{

    "bankId" : 3,
    "name" : "Another Bank",                     

}

我真的被卡住了。如果我运行此查询:

{ "accounts.banks.bankId": "3" }

获取整个文档。而且我尝试了投影的组合但没有成功:

{"accounts.banks.0.$": 1} //returns two elements of array "banks"

{"accounts.banks.0": 1}   //empty bank array

也许这不是查询此问题的方法,而我的方向很糟糕。

你能帮我么?

米克尔

您可以尝试以下解决方案:

db.user.aggregate([
   { $unwind: "$accounts"  },
   { $match: { "accounts.banks.bankId": 3 } },
   {
      $project: {
         items: {
            $filter: {
               input: "$accounts.banks",
               as: "bank",
               cond: { $eq: [ "$$bank.bankId", 3 ] }
            }
         }
      }
   },
   { 
     $replaceRoot : {
        newRoot: { $arrayElemAt: [ "$items", 0 ] }
     } 
   }
])

为了能够过滤帐户,bankId您需要将其$ unwind然后,您可以将帐户匹配到bankId等于的帐户3由于banks是另一个嵌套数组,因此可以使用$ filter运算符对其进行过滤这将为您提供一个嵌套在items数组中的元素。要摆脱嵌套,可以将$ replaceRoot$ arrayElemAt一起使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章