Mongoose 从外部结果中填充

Posted

技术标签:

【中文标题】Mongoose 从外部结果中填充【英文标题】:Mongoose populate from external results 【发布时间】:2021-12-10 17:06:06 【问题描述】:

鉴于我有 2 个完全不同的服务器和数据库。

Server A, Database A:
Database A's model as ModelA :
    _id: ObjectId(),
    fieldA: any


Server B, Database B:
Database B's model as ModelB :
    _id: ObjectId(),
    fieldB: any


Database A _id === Database B _id

Expected result:[
     _id, fieldA, fieldB 
    ...
]

场景: 从 Server A,通过从 Server B 获取 api,我得到了 的列表ModelB的结果。我想使用获取结果来填充 ModelA

假设ModelA 的 find() 结果 = resultAModelB 的 find() 结果 = resultB

到目前为止我的解决方案:

解决方案 A: 流程:从 Server B 获取 => 使用 map 提取 _id 列表 => ModelA.find(listOfExtractedIds ) => 通过 resultA 上的嵌套循环比较和合并结果 resultB *由于涉及多个循环,因此效率极低。

解决方案 B: 从服务器 B => ModelA.populate(resultB ,path:"_id") * 这是我理想的解决方案,但它不起作用,因为 Server A 无法访问 Model B 并且不涉及ref

有没有更好的方法来解决这个问题?或者有没有办法让解决方案 B 按预期工作?

*PS Server A 无法访问 Server 上的 ModelB B. *两个型号均未指定 ref

【问题讨论】:

【参考方案1】:

在这种情况下,解决方案 A 是唯一的解决方案,因为显然两个不同的数据库无法连接数据。

您唯一能做的就是优化解决方案 A 以提高性能,例如使用某种缓存。

【讨论】:

以上是关于Mongoose 从外部结果中填充的主要内容,如果未能解决你的问题,请参考以下文章

使用外部文件中的模型填充 Mongoose 模式属性

如何从 Mongoose 填充查询中排除空值

NodeJS - 我们可以从 Mongoose 更新填充的子文档吗?

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

从 Mongoose Find() 查询向对象数组添加属性 [重复]

从 Mongoose Find() 查询向对象数组添加属性 [重复]