洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
1010
2022-10-11
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~