前些天遇到一个需求,不复杂,用 sql 表现的话,大约如此:
没想到搜了半天,我厂的代码仓库里没有这种用法,各种教程也多半只针对合并查询(即只筛选 db1
,没有 db2
的条件)。所以最后只好读文档+代码尝试,终于找到答案,记录一下。
- 我们用 mongoose 作为连接库
- 联查需要用
$lookup
- 如果声明外键的时候用
objectid
,就很简单:
但是我们没有用 objectid
,而是用 string
作为外键,所以无法直接用上面的联查。必须在 pipeline
里手动转换、联合。此时,当前表(db1
)的字段不能直接使用,要配合 let
,然后加上 $$
前缀;连表(db2
)直接加 $
前缀即可。
最终代码如下:
mongo.ts
同事告诉我,这样做的效率不一定高。我觉得,考虑到实际场景,他说的可能没错,不过,早晚要迈出这样的一步。而且,未来我们也应该慢慢把外键改成 objectid
类型。
总结
到此这篇关于mongodb中实现多表联查的文章就介绍到这了,更多相关mongodb多表联查内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论