gpt4 book ai didi

node.js - NodeJs 与 Mongoose - 嵌套查询异步问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:27 25 4
gpt4 key购买 nike

我必须 mongodb 集合,如下所示:

UserGroup collection
fields:
name: String
group_id: Number
User collection
fields:
user_name: String
group_id: Number

我想生成这样的报告:

ADMINISTRATORS--------------------------jlopezrdiazOPERATORS--------------------------amirallesdcamponits

But I get the following report:

ADMINISTRATORS--------------------------OPERATORS--------------------------jlopezrdiazamirallesdcamponits

Following is the code to generate the report:

UserGroup.find({}, (err, groups) => {
for(var i in groups){
console.log(groups[i].name)
console.log("--------------------")
User.find( {group_id : groups[i].group_id}, (err, users) =>{
for(var j in users){
console.log(users[j].user_name)
}
})
}
})

显然,这是 NodeJs/Mongoose 异步性的问题。

问题:如何让第一个 For 循环等待每个 UserGrop 的内部循环结束?

提前致谢,

大卫。

最佳答案

您可以运行使用 $lookup 的聚合管道 对同一数据库中的另一个集合进行“左连接”,以从“连接”集合中过滤文档进行处理。这样你就不需要任何异步库了:

UserGroup.aggregate([
{
"$lookup": {
"from": "users",
"localField": "group_id",
"foreignField": "group_id",
"as": "users"
}
},
{
"$project": {
"_id": 0,
"name": 1,
"users": {
"$map": {
"input": "$users",
"as": "user",
"in": "$$user.user_name"
}
}
}
}
], (err, groups) => {
if (err) throw err;
console.log(JSON.stringify(groups, null, 4));
})

示例输出

[
{
"name": "ADMINISTRATORS",
"users": ["jlopez", "rdiaz"]
},
{
"name": "OPERATORS",
"users": ["amiralles", "dcamponits"]
}
]

关于node.js - NodeJs 与 Mongoose - 嵌套查询异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43325955/

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