mongodb 连接查询,localField 使用 _id 进行匹配不生效

T ? weblog 你我凑二而成三,我独自一人永不及 本文由博客端 https://www.runnable.run 主动推送

情景再现

情景是这样的,我现在有两个文档
文档 A

_id name
6090acbd682e000028007e74 jack
6090acbd682e000028007e75 rose

文档 B

_id a_id state
6787848807839043584 6090acbd682e000028007e74 1
6787848807839043585 6090acbd682e000028007e75 0

然后需要连接查询文档 A 和文档 B

在 mysql 上我们可以

select * from A left join B on A._id=B.a_id

但是 mongodb 的话我们需要通过 aggregate 实现,
起初写的 sql 是

db.A.aggregate([
{$lookup:{
	from: "B",
         localField: "_id",
         foreignField: "a_id",
         as: "success_id"

}}])

发现根本没有关联值,

解决

Stack Overflow 上找到相似问题,原来需要在 sql 上加

{ 
    $addFields: { "_id": { "$toString": "$_id" } }
  },

image.png

所以,写法改为

db.A.aggregate([
{ 
    $addFields: { "_id": { "$toString": "$_id" } }
  },
{$lookup:{
from: "B",
         localField: "_id",
         foreignField: "a_id",
         as: "success_id"

}}])

得到连接之后的结果

  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    83 引用 • 58 回帖 • 3 关注

广告 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...