我有三个集合A,B和C.
我想用
创建一个嵌套的填充A.findById(id).populate({
path: 'B_docs',
populate: {
path: 'C_doc'
}
})
问题是C
集合中的文档可能不存在,因此我最终得到了A
中包含来自B
的多个文档的文档,但是其中的一些文档B
引用了C
中可能已被删除的文档。
如何确保我只包含引用的B
文档仍然存在的C
个文档?
当然我可以使用
a_doc.b_docs.filter(b_doc => !!b.c_doc)
但我希望直接使用Mongoose删除这些文档(因为它们在我的上下文中无效)。
答案 0 :(得分:0)
我认为使用内置的populate函数是不可能的,因为mongoose查询数据库并按以下顺序构建结果:
B_docs
C_doc
属性当Mongoose发现C缺失时,所有B文档都已填充,如果Mongoose可以根据您的条件过滤文档,那么将在节点级别执行,因此您可以对提到的代码部分执行相同操作:
a_doc.b_docs.filter(b_doc => !!b.c_doc)
可能的解决方案可能是聚合,$project
和$filter
应该是可能的