Mongodb 如何使用父引用填充猫鼬中的一对多关系?

Mongodb 如何使用父引用填充猫鼬中的一对多关系?,mongodb,mongoose,foreign-keys,one-to-many,mongoose-populate,Mongodb,Mongoose,Foreign Keys,One To Many,Mongoose Populate,我有三个收藏:父母、孩子1、孩子2 父集合: [{_id:1}, {_id:2}, {_id:3}] [{_id:1, child1:'a', parent:1}, {_id:2, child1:'b', parent:1}, {_id:3, child1:'c', parent:2}] [{_id:1, child1:'d', parent:2}, {_id:2, child1:'e', parent:3}] 儿童1系列: [{_id:1}, {_id:2}, {_id:3}] [{_

我有三个收藏:父母、孩子1、孩子2

父集合:

[{_id:1}, {_id:2}, {_id:3}]
[{_id:1, child1:'a', parent:1}, {_id:2, child1:'b', parent:1}, {_id:3, child1:'c', parent:2}]
[{_id:1, child1:'d', parent:2}, {_id:2, child1:'e', parent:3}]
儿童1系列:

[{_id:1}, {_id:2}, {_id:3}]
[{_id:1, child1:'a', parent:1}, {_id:2, child1:'b', parent:1}, {_id:3, child1:'c', parent:2}]
[{_id:1, child1:'d', parent:2}, {_id:2, child1:'e', parent:3}]
儿童2系列:

[{_id:1}, {_id:2}, {_id:3}]
[{_id:1, child1:'a', parent:1}, {_id:2, child1:'b', parent:1}, {_id:3, child1:'c', parent:2}]
[{_id:1, child1:'d', parent:2}, {_id:2, child1:'e', parent:3}]
集合child1和child2引用到父集合

现在,我希望mongoose中的查询得到如下结果:

[
 {
  _id:1,
  child1:[{_id:1, child1:'a'}, {_id:2, child1:'b'}],
  child2:[],
 },
 {
  _id:2,
  child1:[{_id:2, child1:'c'}],
  child2:[{_id:1, child1:'d'}],
 },
 {
  _id:3,
  child1:[],
  child2:[{_id:2, child1:'e'}],
 },
]
总的来说,我的尝试工作正常:

db.parent.aggregate([
  {
    "$lookup": {
      "from": "child1",
      "localField": "_id",
      "foreignField": "parent",
      "as": "child1"
    }
  },
  {
    "$lookup": {
      "from": "child2",
      "localField": "_id",
      "foreignField": "parent",
      "as": "child2"
    }
  }
])

当集合在同一个数据库中,但我的集合在单独的数据库中时,这种方法有效

e、 g:父数据库中的父集合以及子数据库中的child1和child2集合

您是否知道如何跨多个数据库使用聚合,或者如何使用“填充”来解决此问题?

如关于
$lookup
所述:

同一数据库中的未分片集合执行左外部联接,以从“联接”集合中筛选文档进行处理

所以不,这是不可能的跨DBs进行操作

但是,作为补充,使用Mongo存在选项

文件中说:

用于在不修改shell环境中的db变量的情况下返回另一个数据库

因此,这不是一个
$lookup
,而是一种拥有另一个数据库数据的方法。

$lookup
所述:

同一数据库中的未分片集合执行左外部联接,以从“联接”集合中筛选文档进行处理

所以不,这是不可能的跨DBs进行操作

但是,作为补充,使用Mongo存在选项

文件中说:

用于在不修改shell环境中的db变量的情况下返回另一个数据库


因此,这不是一个
$lookup
,而是一种拥有另一个数据库数据的方法。

到目前为止您尝试了什么?尝试使用聚合您可以在单个查询中使用多个查找。我的集合在单独的数据库中,例如:一个数据库中的父集合,另一个数据库中的child1和child2 coll。只有我可以使用poplulate请在您的问题中更新此详细信息,而不是在注释中,我认为单次查询是不可能的。看看这个开放的和类似的,到目前为止你都做了些什么?尝试使用聚合您可以在单个查询中使用多个查找。我的集合在单独的数据库中,例如:一个数据库中的父集合,另一个数据库中的child1和child2 coll。只有我可以使用poplulate请在您的问题中更新此详细信息,而不是在注释中,我不认为单凭一个查询就可以看到这个开放的和类似的,