如何将 mongo 查找查询的结果添加到另一个查找查询中
How to add result of a mongo find query into another find query
首先,我在 collection:
中搜索所有组文档
const groups = await Content.find({ type: 'group' }).toArray()
对于这个数组,我需要找到每个 children 文档并将它们添加到 object:
groups.map(async g => {
g.content = await Content.find({
type: 'element',
parent: g._id
}).toArray()
console.log(g) // <-- has content field, which is what I am expecting
})
console.log(groups) // <-- content field is missing
例子
为了更清楚一点:groups
可能会有这样的结果:
[{
_id: 'xxnQt5X8pfbcJMn6i',
title: 'Title',
type: 'group',
}]
现在我正在搜索具有 parent ID 的所有文档的每个元素(在本例中它只有一个),这个结果应该作为一个字段添加到 group
。
[{
_id: 'xxnQt5X8pfbcJMn6i',
title: 'Title',
type: 'group',
content: [
{ _id: '1', title: 'example', parent: 'xxnQt5X8pfbcJMn6i' },
{ _id: '2', title: 'another example', parent: 'xxnQt5X8pfbcJMn6i' }
]
}]
在我的尝试中,在 map() 之外执行 console.log 时我没有获得内容。
也许可以直接使用我的 mongoDB 查询(我正在使用 mongoDB native driver)
这是您正在寻找的完美案例 Promise.all
var promiseArray = groups.map(g => {
return Content.find({type: 'element',parent: g._id},function(err,cursor){
g['content'] = cursor.toArray();
return g;
});
})
Promise.all(promiseArray ).then(function(groups) {
console.log(groups)
})
首先,我在 collection:
中搜索所有组文档const groups = await Content.find({ type: 'group' }).toArray()
对于这个数组,我需要找到每个 children 文档并将它们添加到 object:
groups.map(async g => {
g.content = await Content.find({
type: 'element',
parent: g._id
}).toArray()
console.log(g) // <-- has content field, which is what I am expecting
})
console.log(groups) // <-- content field is missing
例子
为了更清楚一点:groups
可能会有这样的结果:
[{
_id: 'xxnQt5X8pfbcJMn6i',
title: 'Title',
type: 'group',
}]
现在我正在搜索具有 parent ID 的所有文档的每个元素(在本例中它只有一个),这个结果应该作为一个字段添加到 group
。
[{
_id: 'xxnQt5X8pfbcJMn6i',
title: 'Title',
type: 'group',
content: [
{ _id: '1', title: 'example', parent: 'xxnQt5X8pfbcJMn6i' },
{ _id: '2', title: 'another example', parent: 'xxnQt5X8pfbcJMn6i' }
]
}]
在我的尝试中,在 map() 之外执行 console.log 时我没有获得内容。
也许可以直接使用我的 mongoDB 查询(我正在使用 mongoDB native driver)
这是您正在寻找的完美案例 Promise.all
var promiseArray = groups.map(g => {
return Content.find({type: 'element',parent: g._id},function(err,cursor){
g['content'] = cursor.toArray();
return g;
});
})
Promise.all(promiseArray ).then(function(groups) {
console.log(groups)
})