簡體   English   中英

查詢mongoDB中的子文檔

[英]query sub document in mongoDB

我正在嘗試查詢公司名稱及其管理員用戶。

這是我的結構:

companies: [
    {
        _id: "generatedComp1Id",
        name: "abc",
        users: [
          { _id: "...", user: "userId1", roles: ["admin"]},
          { _id: "...", user: "userId2", roles: ["user"]}
        ]
    },
    {
        _id: "generatedComp2Id",
        name: "xyz",
        users: [
          { _id: "...", user: "userId3", roles: ["admin"]},
          { _id: "...", user: "userId4", roles: ["admin"]},
          { _id: "...", user: "userId5", roles: ["user"]}
        ]
    }

]

我正在嘗試為給定 companyId 的每個公司查詢公司name和管理員用戶。

Output:

對於generatedComp1Id的公司 ID:

{
    name: "abc",
    adminUsers: [
        {user: "userId1"}
    ]
}

對於generatedComp2Id的公司 ID:

{
    name: "xyz",
    adminUsers: [
        {user: "userId3"},
        {user: "userId4"}
    ]
}

我試圖做下一件事但沒有成功:

[  
   { $match: {_id: ObjectId("generatedComp1Id")}},
   {
        $project: {
            name: 1,
            adminUsers: {
                $filter: {
                    input: "$roles",
                    as: "role",
                    cond: {
                        $eq: ["$$role", "admin"]
                    }
                }                
            }
        }
    }
]

另外,我嘗試unwind

[
  {$unwind:'$users'}, 
  {$match:{'users.roles':{$in:['admin']}}},
  {$group:{_id:'$_id',users:{$push:'$users'}}},
  { $project: { name: 1 } }
  ]
  • $filter迭代users數組的循環,檢查“admin”的條件在roles數組中
  • $map迭代上述過濾結果的循環並返回user字段
[
  { $match: { _id: ObjectId("generatedComp1Id") } },
  {
    $project: {
      name: 1,
      adminUsers: {
        $map: {
          input: {
            $filter: {
              input: "$users",
              as: "role",
              cond: { $in: ["admin", "$$role.roles"] }
            }
          },
          in: { user: "$$this.user" }
        }
      }
    }
  }
]

操場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM