Mongo基于一张表的数据更新另一张表

业务场景中,经常有这样一个需求,就是根据A表中的信息,更新B表的某个字段,在关系型数据库中,这个需求很简单,一条SQL搞定:

update B set B.f1=A.a1 where xxxx

但在mongo数据库中,一条SQL就解决不了。好在mongo支持js脚本,可以通过js写类似于存储过程的方式实现。譬如,业务场景中,有一个用户表,一个车辆表,车辆表的状态要汇总到用户表中,

var cursor =
db.getCollection(‘vehicle‘).aggregate([
    {$match:
        {‘checkStatus‘:2}
    },
    {$group:
      {_id:"$userId",vehicleNum:{$sum:1}}
    }
])
while(cursor.hasNext()){
    r = cursor.next();
    print(r["_id"] + "\t" + r["vehicleNum"]);
    db.getCollection("user").update({_id: r["_id"]},
                            {$set: {vehicleNum: r["vehicleNum"],
                            updateDatetime: ISODate("2019-05-23T09:07:56.566+08:00")}
                            })
}

这个原理很简单,就是根据mongo返回游标遍历,只要知道游标节点访问方式即可轻易写出来。

原文地址:https://blog.51cto.com/10705830/2399125

时间: 2024-11-07 23:49:54

Mongo基于一张表的数据更新另一张表的相关文章

SQL Update实现使用一个表的数据更新另一张表

表结构 功能 SQL Serevr Access 表结构 功能 用表B的数据(mc列)更新表A的mc列 SQL Server语句 update A SET A.mc = b.mc FROM A ,B WHERE A.bmbh = B.bmbh and A.xmbh = B.xmbh; Access语句 update A, B set A.mc = B.mc where A.bmbh = B.bmbh and A.xmbh = B.xmbh; 或者 update A INNER JOIN B ON

SQL Update:使用一个表的数据更新另一张表

表结构 功能 用表B的数据(mc列)更新表A的mc列 SQL Server update A SET A.mc = b.mc FROM A ,B WHERE A.bmbh = B.bmbh and A.xmbh = B.xmbh; Access update A, B set A.mc = B.mc where A.bmbh = B.bmbh and A.xmbh = B.xmbh; 或 update A INNER JOIN B ON A.bmbh = B.bmbh AND A.xmbh =

SQL 用一个表的数据更新另一张表

用表B的数据(B1列,B2)更新表A的A1,A2列 SQL Server: update A SET A.A1 = b.B1,A.A2=B.A2 FROM A ,B WHERE A.ID1 = B.ID1 and A.ID2 = B.ID2; Access: update A, B set A.A1 = B.B1,A.A2=B.B2 where A.ID1 = B.ID1 and A.ID2 = B.ID2; --或 update A INNER JOIN B ON A.ID1 = B.ID1

SQL Server更新表(用一张表的数据更新另一张表的数据)

a) 写法轻松,更新效率高: update table1 set field1=table2.field1,field2=table2.field2 from table2 where table1.id=table2.id b) 常规方式,这种写法相当于一个 Left join, 以外面的where为更新条数,如果不加where就是所有记录 update table1 set field1= (select top 1 field1 from table2 where table2.id=ta

使用kettle实现两张表的数据更新

请大家指教,使用的Oracle数据库作为数据源,mysql数据库做同步 1.如图所示: 拖进,表输入,插入/更新,write to log, 2.下面进入配置页面,双击”表输入“ 或是右键”编辑步骤“ 如果所示: 配置你的主数据源,就是你要从他上边更新数据的,点击”新建“或是”编辑“进行数据库配置,如图所示, 你的数据库地址ip,数据库,端口号,用户名,密码,点击”Test“进行测试连接,然后关闭进行点击,”获取查询sql语句“,如图所示: 选择你的数据源表,然后点击”确定“ 3.进行插入/更新

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添加一个User类: namespace MyFirstApp.Models { public class User { public int ID { get; set; } public string Name { get; set; } public string Email { get; se

如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之自定义表单开发随笔四

"厂长,上一次我们讲过了工作流的整体规划,今天我要动手做啦!我想先把工作流的自定义表单做出来." "好的,以前我做这方面的东西,我给你设计了一份表结构,你先拿去看看." "厂长,是不是没发完,怎么就一个表?" "我就知道你会这么问,我现在给你解释一下重点字段的含义." 数据表:将表单上的内容保存到哪个表. 关联表的主键:要保存表单数据那张表的主键. 是否需要建表:是否需要把表单中的数据存入到表中,这里的意思是,是将表单上面的栏

一张表数据分到几张表性能优化

最近在做一个银行项目,从一张表(CCB_CREDIT_TRX)里要往七.八张表写数据, 一开始的做法是把这张表对应的实体select出来,放到一个List集合中,再对这个LIST List<CcbCreditTrx> list = new ArrayList<CcbCreditTrx>;//对这个List遍历for(CcbCreditTrx ccbCreditTrx:list) { //这里处理对其他表的操作 //表A .... //表B .... //表C .... } 建议做法

mysql从一个表提取数据更新另外一个表(修复表数据的不一致)

目前碰到一个数据不一致的情况,有两张表,一张项目表,一张项目成员表,项目表有个字段是项目工作时间,是项目成员的工作时间汇总.是由于该了逻辑,所以要把数据改成一致. 项目表的大致结构如下. 表名:project 项目成员表大致结构如下. 表名:projectMember projectMember表的PID和project的Id关联,project_WorkTime是member_WorkTime的和. 往project表插三条数据. projectMember表数据如下: sql语句如下: UP