[英]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.