gpt4 book ai didi

node.js - Mongoose 嵌套查询,等待第二个查询返回数据

转载 作者:行者123 更新时间:2023-12-04 10:15:38 25 4
gpt4 key购买 nike

我有一个集合如下:

集合 A:

 {
_id: 5e8b1dd9e45da75adb2278fd,
mobile: '445566',
content_id: 5e8b1d1ae45da75adb2278fc,
active: false,
}

我有另一个这样的集合:

集合 B:

{
title: {
en: 'example title',
xx: 'another title',
},
body: {
en: 'example body',
yy: 'another body',
},
_id: 5e8b1d1ae45da75adb2278fc,
}

如果您看到第一个集合包含第二个集合的 _id,那么我正在使用 mongoose 并且我可以单独列出每个集合并且它工作正常,现在我想获取 col A 中的所有项目并且因为它是一系列项目,我想做这样的事情:

async (req, res, err) {
const allContents = [];
const mobile = [];

mobiles = await MyCollectionA.find({mobile: req.params.mobile})

mobiles.forEach(async (mobile) => {
const content = await MyCollectionB.findById(mobile.content_id);
allContents.push(mobile, content);
// if I do console.log(allContents), here I have all needed data available
});
console.log(allContents) // show me empty array, []
res.json(allContents);
}

它似乎并没有等到 forEach 完成它的工作;我尝试了 mongoose stream 也无法达到我想要的效果。

最佳答案

您可以使用“for”循环或使用 Promise.all 让它等待,如下所示:

async (req, res, err) {
const allContents = [];
const mobile = [];

mobiles = await MyCollectionA.find({mobile: req.params.mobile})

await Promise.all( mobiles.map(async (mobile) => {
const content = await MyCollectionB.findById(mobile.content_id);
allContents.push(mobile, content);
}));
console.log(allContents) // show me empty array, []
res.json(allContents);
}

关于node.js - Mongoose 嵌套查询,等待第二个查询返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61075743/

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