栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Mongodb聚合运算(三)

Mongodb聚合运算(三)

$lookup操作符 语法格式:
{
   $lookup:
     {
       from: ,
       localField: ,
       foreignField: ,
       as: 
     }
}
参数解释

from:指定要与之连接的同一数据库中的集合,相当于从表

localField:指定从文档输入到$lookup阶段的字段,类似主表要关联的字段

foreignField:类似mysql从表要关联的字段

as:指定要添加到主文档的新数组字段的名称。新的数组字段包含来自从文档的匹配文档。如果指定的名称已经存在于输入文档中,则覆盖现有字段。

单字段精准匹配连接

新增文档

db.java.insert(
[
  {
  "title": "db","name": "mongodb","type": "nosql"
},
  {
    "title": "db","name": "redis","type": "nosql"
  }
,
  {
    "title": "mq","name": "rocktmq","type": "master"
  }
])

db.data.insert(
[
  {"name":"mongodb","version": 5.0,"company": "mongodb","country":"USA"},
  {"name":"redis","version": 6.0,"company": "redis","country":"USA"}
])

连接查询:Java left join data on java.name = data.name

db.java.aggregate([
{
  $lookup:
  {
    from: "data",
    localField: "name",
    foreignField: "name",
    as: "dbname"
  }
}]).pretty()

结果如下:

{
        "_id" : ObjectId("616a6fa1a428b3665261cdcf"),
        "title" : "db",
        "name" : "mongodb",
        "type" : "nosql",
        "dbname" : [
                {
                        "_id" : ObjectId("616a6ff5a428b3665261cdd2"),
                        "name" : "mongodb",
                        "version" : 5,
                        "company" : "mongodb",
                        "country" : "USA"
                }
        ]
}
{
        "_id" : ObjectId("616a6fa1a428b3665261cdd0"),
        "title" : "db",
        "name" : "redis",
        "type" : "nosql",
        "dbname" : [
                {
                        "_id" : ObjectId("616a6ff5a428b3665261cdd3"),
                        "name" : "redis",
                        "version" : 6,
                        "company" : "redis",
                        "country" : "USA"
                }
        ]
}
{
        "_id" : ObjectId("616a6fa1a428b3665261cdd1"),
        "title" : "mq",
        "name" : "rocktmq",
        "type" : "master",
        "dbname" : [ ]
}
数组匹配连接

删除上面的java文档

db.java.drop()

新增java文档,name为数组形式

db.java.insert(
[
  {
  "title": "db","type": "dataSave","name": ["mysql","oracle","mongodb"]
},
  {
    "title": "mq","type": "translate", "name": ["rocketmq","kafka"]
  }
])

连接查询

db.java.aggregate([
{
  $lookup:
  {
    from: "data",
    localField: "name",
    foreignField: "name",
    as: "dbname"
  }
}]).pretty()

结果如下:

{
        "_id" : ObjectId("616a722ea428b3665261cdd4"),
        "title" : "db",
        "type" : "dataSave",
        "name" : [
                "mysql",
                "oracle",
                "mongodb"
        ],
        "dbname" : [
                {
                        "_id" : ObjectId("616a7234a428b3665261cdd6"),
                        "name" : "mongodb",
                        "version" : 5,
                        "company" : "mongodb",
                        "country" : "USA"
                }
        ]
}
{
        "_id" : ObjectId("616a722ea428b3665261cdd5"),
        "title" : "mq",
        "type" : "translate",
        "name" : [
                "rocketmq",
                "kafka"
        ],
        "dbname" : [ ]
}
$mergeObjects合并查询结果

删除之前的Java文档,新增Java文档

db.java.insert(
[
  {
  "title": "db","name": "mongodb","type": "nosql"
},
  {
    "title": "db","name": "redis","type": "nosql"
  }
,
  {
    "title": "mq","name": "rocktmq","type": "master"
  }
])

连接查询后执行merge操作

db.java.aggregate([
  {
    $lookup:
    {
      from: "data",
      localField: "name",
      foreignField: "name",
      as: "dbname"
    }
  },
  {
    $replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: [ "$dbname", 0 ] }, "$$ROOT" ] } }
  },
  {
    $project: { dbname: 0 }
  }
]).pretty()

结果如下:

{
        "_id" : ObjectId("616a7383a428b3665261cdd8"),
        "name" : "mongodb",
        "version" : 5,
        "company" : "mongodb",
        "country" : "USA",
        "title" : "db",
        "type" : "nosql"
}
{
        "_id" : ObjectId("616a7383a428b3665261cdd9"),
        "name" : "redis",
        "version" : 6,
        "company" : "redis",
        "country" : "USA",
        "title" : "db",
        "type" : "nosql"
}
{
        "_id" : ObjectId("616a7383a428b3665261cdda"),
        "title" : "mq",
        "name" : "rocktmq",
        "type" : "master"
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/326281.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号