【问题标题】:MongoDB: $lookup accross 2 databasesMongoDB:跨 2 个数据库的 $lookup
【发布时间】:2019-09-04 11:34:52
【问题描述】:

我有两个数据库。

  1. 一个包含用户信息的数据库。
  2. 一个包含销售信息的数据库。

我正在尝试聚合一个集合。我需要使用 localField 作为用户数据库中的用户 ID 进行 $lookup。

我该怎么做?

在猫鼬中,我可以使用populate 并指定我要使用的模型,如下所示:

.populate({
  path: 'user',
  select: 'name',
  model: UserModelFromDifferentDB
})

但是在 $lookup 中我看不到这样的选项?

问题开始的示例:

        const data = await Sale.aggregate([
        {
            $match: {
                creator: Types.ObjectId("5d5154a37dcf4a00171c0018")
            }
        },
        {
            $lookup:
              {
                from: 'users', // no users collection in this DB, it is in the other db
                localField: 'user',
                foreignField: '_id',
                as: 'user'
              }
        },
      ])

【问题讨论】:

  • 请添加示例 I/O 和示例集合
  • 用户集合和销售集合在单独的数据库中没有在单个数据库中?
  • @sushantmehta 是的!
  • 为什么?它们在不同的数据库中吗?
  • 无法在两个不同的数据库中使用查找进行查询。 mongodb 中的 $lookup 支持对同一数据库中的非分片集合执行左外连接。上面的链接中给出了替代方案。

标签: javascript node.js mongodb


【解决方案1】:

据我所知,聚合不可能跨两个数据库进行 $lookup。 但如果你能做一些逻辑代码,那么“getSiblingDB()”会帮助你。

 first_DB_data = db.getSiblingDB('students').bca.find() //'students' is DB,'bca' is collection
 second_DB_data = db.getSiblingDB('marks').finals.find() //'marks' is DB,'finals' is collection

从两个数据库中获取所有记录后,您可以执行代码以获得所需的输出。 现在您拥有来自两个数据库的所有记录,您可以根据任何条件过滤掉数据.. 希望对你有帮助

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 2012-10-28
    • 2011-09-11
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2017-01-06
    • 2020-09-07
    相关资源
    最近更新 更多