假设您有两个集合:CollectionA 和 CollectionB。
在 CollectionA 中,您有一个像这样的文档模型
_id
childs{
kind
position
childA
childB
}
childA引用 CollectionA 中的文档,并引用childBCollectionB 中的文档
在 CollectionB 你有一个像这样的文档模型
_id
propertyA
propertyB
我在 Node.Js 中所做的是一个递归函数,就像在这个伪代码中一样
function getProperties(id){
let properties = [];
if(id) {
let document = collectionB.findOne(id);
if(document && document.childs) {
for(let child of document.childs) {
if(child.childB){
properties = properties.concat(getProperties(child.childB)):
}
if(child.childA){
let documentA = collectionA.findOne(child.childA);
if(documentA){
properties.push(documentA.prpertyA);
}
}
}
}
}
return properties;
}
然而,随着孩子的成长,从层次结构中获取所有属性的时间也会增加,有时会导致一分钟的等待时间(在某些情况下甚至会超时!)。那么,我该如何改进这一点,也许使用一些 mongodb 原生函数?我已经在findOne函数中使用了 DataLoader,这有帮助,但没有我想象的那么大。