账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mongodb使用$lookup多表查询localField和foreignField字段类型不同
    86
    0

    mongodb使用$lookup多表查询时,需要要求localField和foreignField字段的类型相同

    但是网上说类型可以转,但是没说怎么转,我查了一下也没查到,你们知道该怎么转吗?

    db.user.aggregate(\[ {
         $lookup:
           {
             from: "inventory",
             localField: "_id",
             foreignField: "item",
             as: "inventory_docs"
           }
      } \])

    我使用的是mongodb数据库自动生成的_id,作为另一个表的外键

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在MongoDB的$lookup聚合阶段中,localField和foreignField需要是相同的数据类型,这样才能进行有效的匹配。如果字段类型不同,MongoDB将无法正确执行关联查询。

      例如,假设你有一个订单集合(orders)和一个用户集合(users),其中:

      • 订单集合中的localField(user_id)是字符串类型。
      • 用户集合中的foreignField(_id)是ObjectId类型。

      在这种情况下,你需要确保在进行$lookup之前,对字段类型进行转换或处理,使之匹配。例如,可以将订单集合中的user_id转换为ObjectId类型:

      javascript db.orders.aggregate([ { $addFields: { user_id: { $toObjectId: "$user_id" } // 将user_id字段转换为ObjectId类型 } }, { $lookup: { from: "users", localField: "user_id", foreignField: "_id", as: "user" } }, // 其他聚合操作... ])

      这样MongoDB就可以正确地使用$lookup进行关联查询了。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部