第二步:保留第一个join结果
第一步join的结果字段是一个Array类型的数据,如果想要做一个左外连接使用$unwind拆分即可,若是想仅保留第一个就不要拆分,先把第一步的结果使用$out输出到一个中间表中,再进行接下来的操作:
db.中间表.aggregate(
{$project : {
"_id": 0,
"id": 1,
"type": 1,
"startNode": 1,
"startKeyNo": 1,
"endKeyNo": 1,
"endNode": 1,
"role": 1,
"test":{$slice:["$node", 1]}
,{ $unwind : "$test" }
,{$out:"中间表2"}
解释:使用$slice 得到第一个
第三步:拆分字段
经过第二步以后,结果字段由数组变为了非数组的document 这一步,进一步把document中的字段拆分出来
db.第二步的结果集合名称.aggregate(
{$project : {
"node_name": "$test.name"
// ,{$out:"结果集合名称"}
使用aggregate的$project , 使用$关键字和 . 得到属性的属性值
1.首先join代码:db.collection_1.aggregate([ { "$lookup": { "localField": "startKeyNo", "from": "collection_2", "foreignField": "keyNo", "as": "node" } }// , { "$unwind": "$node" ...
select ad._id as adId,ad.name,o.h,o.w
from adress as ad
left join order as o on o._id=ad.aId;
mongodb-aggregate左连接写法
db.address.aggregate([
{$unwind:{
今天开发同学向我们提了一个紧急的需求,从集合mt_resources_access_log中,根据字段refererDomain分组,取分组中最近一笔插入的数据,然后将这些符合条件的数据导入到集合mt_resources_access_log_new中。
接到这个需求,还是有些心虚的,原因有二,一是,业务需要,时间紧;二是,实现这个功能MongoDB聚合感觉有些复杂,聚合要走好多步。
数据记录格式如下:
"_id" : ObjectId("5c1e23eaa66bf62c0c390afb"),
"_class" : "C1",
"resourceUrl" : "/st
一、 lookup的功能及语法
主要功能 是将每个输入待处理的文档,经过$lookup 阶段的处理,输出的新文档中会包含一个新生成的数组列(户名可根据需要命名新key的名字 )。数组列存放的数据 是 来自 被Join 集合的适配文档,如果没有,集合为空(即 为[ ])
1、基本语法
from需要join的表, localField相当于主表的键,foreignFiel相当于join的键
db.getCollection.aggregate{
$lookup:
from: &
需求:要对 topics 问题表根据 teach_id(教师ID),tips._id(问题标签ID) 字段进行分组统计教师的答题情况生成报表,所以得根据 教师ID,标签ID 关联查询出 教师信息,标签信息 用作报表展示。
本文基于 MongoDB V3.2 聚合查询语法,V3.6 可使用更多的特性实现
topics 表数据结构:
"_id" : "ffffea46-ab7d-4c1...
MongoDB是一种非关系型数据库,它没有传统SQL中的join操作。但是,可以使用MongoDB的$lookup操作实现类似于inner join和left join的效果。
使用$lookup操作可以将一个集合中的文档与另一个集合中的文档进行关联。具体实现方式如下:
1. inner join
假设我们有两个集合:orders和products,orders集合中的文档包含一个字段productId,这个字段的值与products集合中的_id字段相对应。我们可以使用以下代码实现inner join的效果:
db.orders.aggregate([
$lookup:
from: "products",
localField: "productId",
foreignField: "_id",
as: "product"
在这个例子中,我们将orders集合中的每个文档与products集合中的文档进行匹配。如果匹配成功,$lookup操作将会将匹配的文档放入一个新的数组中,这个数组会被赋值给product字段。
2. left join
如果要实现left join的效果,我们需要使用MongoDB的$unwind操作,将$lookup操作返回的数组展开成多个文档。具体实现方式如下:
db.orders.aggregate([
$lookup:
from: "products",
localField: "productId",
foreignField: "_id",
as: "product"
$unwind: "$product"
在这个例子中,$lookup操作返回的数组会被展开成多个文档,每个文档中都包含一个匹配的products文档。如果没有匹配的文档,$lookup操作返回的数组会是一个空数组。