MongoDB-聚合操作$lookup

网友投稿 904 2022-10-11

MongoDB-聚合操作$lookup

MongoDB-聚合操作$lookup

聚合管道阶段

$lookup: 用来做关联查询

格式:

{$lookup:{ from: 关联集合名称, localField: 当前集合中的字段名称, foreignField:关联集合中的字段名称, as: 输出字段的名称}}

添加测试数据

db.person.insert([ {name:{firstName:'Jonathan', lastName:'Lee'}, age:18, books:['html', 'js']}, {name:{firstName:'Amelie', lastName:'Jiang'}, age:19, books:['vue']}, {name:{firstName:'si', lastName:'Li'}, age:20, books:[]}]);db.books.insert([ {name:'html', price:88}, {name:'js', price:99}, {name:'vue', price:110},]);db.person.find();

使用 $lookup:

db.person.aggregate([ { $lookup:{ from: 'books', localField: 'books', foreignField: 'name', as: 'booksData' } }])

和 unwind 阶段结合使用

可以有效的过滤掉无效数据可以给每个匹配的结果生成一个新的文档

db.person.aggregate([ { $unwind:{ path:'$books' } }, { $lookup:{ from: 'books', localField: 'books', foreignField: 'name', as: 'booksData' } }])

其实 $lookup 还有第二种使用方式,关键字有几个不一样含义分别如下:

{$lookup:{ from: 关联集合名称, let: {定义给关联集合的聚合操作使用的当前集合的常量}, pipeline: [关联集合的聚合操作] as: 输出字段的名称}}

不相关查询

db.person.aggregate([ { $lookup:{ from: 'books', pipeline: [ { $match:{ price:{$gte:100} } } ], as: 'booksData' } }])

相关查询

db.person.aggregate([ { $lookup:{ from: 'books', let: { bks: '$books'}, pipeline: [ { $match:{ $expr:{ $and:[ {$gte: ['$price', 100]}, {$in: ['$name', '$$bks']} ] } } } ], as: 'booksData' } }])

系统变量表达式

​​$$​​: 使用 $$ 来指示系统变量

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MongoDB-聚合操作$unwind
下一篇:Elasticsearch Recovery索引分片分配详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~