var queryDetail = new BsonDocument("cNo", doc.cNo);
                    queryDetail.AddRange(new BsonDocument("Details.dDate", doc.oRDate));

                    //日表数组中存在相同报表日期的数据
                    bool exist = tblDays.FindSync(queryDetail).Any();
                    if (exist)
                    {
                        #region 日表数组中存在相同报表日期的数据,则按字段更新

                        List<WriteModel<BsonDocument>> requests = new List<WriteModel<BsonDocument>>();
                        requests.Add(new UpdateOneModel<BsonDocument>(_query, update) { IsUpsert = true });

                        var updateDetail = new BsonDocument();
                        foreach (var propert in properties)
                        {
                            var vals = propert.GetValue(detail);
                            if (propert.PropertyType.BaseType.Name.Equals("Enum"))
                            {
                                vals = Convert.ToInt64(vals);
                            }
                           
                            var tmpUpdate = new BsonDocument() { { "$set", new BsonDocument() { { string.Format("Details.$.{0}", propert.Name), BsonDocumentWrapper.Create(vals) } } } };

                            requests.Add(new UpdateOneModel<BsonDocument>(queryDetail, tmpUpdate) { IsUpsert = true });
                        }
                        if (requests.Count > 0)
                        {
                            tblDays.BulkWrite(requests);
                        }

                        #endregion
                    }

else                    {
                        #region 日表数组中不存在相同报表日期的数据,则直接新增到数组

                        var updateSet = new BsonDocument() { { "$addToSet", new BsonDocument() { { "Details", BsonDocumentWrapper.Create(detail) } } } };
                        update.AddRange(updateSet);

                        tblDays.UpdateOne(_query, update, new UpdateOptions { IsUpsert = true });

                        #endregion
                    }

c# mongo 数组里对象更新的更多相关文章

  1. Vue 数组和对象更新,但是页面没有刷新

    在使用数组的时候,数组内部数据发生改变,但是与数组绑定的页面的数据却没有发生变化. <ul> <li v-for="(item,index) in todos" ...

  2. JS 过滤数组里对象的某个属性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Vue使用v-for显示列表时,数组里的item数据更新,视图中列表不同步更新的解决方法

    由于初始化类型错误导致的不更新,代码是这样的: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. JavaScript怎么把对象里的数据整合进另外一个数组里

    https://blog.csdn.net/qq_26222859/article/details/70331833 var json1 = [ {"guoshui":[ 3000 ...

  5. 微信小程序--修改data数组或对象里面的值

    1.初始data数据 Page({     data:{          code:'1234',         reward:[{             name:"艾伦" ...

  6. 统计Mongo数组中相同对象的属性之和

    统计Mongo数组中相同对象的属性之和 需求 需要统计app端用户的行为,按天分表,存入mongo.每次用户进行操作的时候,将数据存入app本地,下次用户启动的时候,提交存入mongo,删除app本地 ...

  7. iOS- 再谈ARC里内存问题,ARC里数组、对象内存得不到释放?

    1.前言      本来以为在改成ARC以后,不再需要考虑内存问题了,可是在实践中还是发现有一些内存问题需要注意,今天我不谈block的循环引用的问题,主要说说一些对象.数组不内存得不到释放的情况. ...

  8. vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示

    vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示 https://cn.vuejs.org/v2/guide/class-and-sty ...

  9. js对象追加到数组里

    描述:将一个点击事件得到的对象追加到数组里 做法:全局声明一个数组,,在对象的点击事件里将得到的对象追加到数组 change(a){ arr.push(a) console.log(arr) var ...

随机推荐

  1. [knowledge][dpdk] open data plane

    https://www.opendataplane.org/ https://en.wikipedia.org/wiki/OpenDataPlane odp vs dpdk:  http://dpdk ...

  2. redis使用rdb恢复数据

    redis中存在rdb备份和aof备份两种方式. 如果在redis多个节点发生雪崩时,我们往往使用定期冷备rdb或者aof文件,去恢复数据的方式,但往往数据量较大时rdb恢复更加的快速,毕竟aof保存 ...

  3. Python库源码学习1:Flask之app.run

    先列出app.run()实现的功能,我们以debug=True的情况下进行分析. 1. web服务器,处理http请求 2. 当代码修改后,重启服务器 那么app.run()是如何实现这两个功能的呢? ...

  4. block详解

    Objective-C 中 Block 有三种类型: NSStackBlock 存储于栈区 NSGlobalBlock 存储于程序数据区 NSMallocBlock 存储于堆区 block 内部没有引 ...

  5. sqlserver数据库查询,在数据类型不一致时容易出错

    1. 如此句sql: select SysNo from User_MainInfo where Ouid=@Ouid 在 User_MainInfo表中Ouid是nvarchar类型,但当我们传入的 ...

  6. mysqldump备份数据出错

    收到nagios报警,提示mysql备份失败,线上使用的是逻辑备份,也就是使用mysqldump,由于数据比较小,也就没在乎速度神马的问题.好吧,那就查查是什么原因导致备份失败,由于备份是写成脚本定时 ...

  7. 看大师解说Android高速开发框架EasyAndroid

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u010966622/article/details/37601789 前几天做了小应用.感觉小有成就 ...

  8. 20165236 实验二 《Java面向对象程序设计》实验报告

    20165236 实验二<Java面向对象程序设计>实验报告 姓名:郭金涛       学号:20165236      课程:Java程序设计 指导老师:娄嘉鹏       实验时间:2 ...

  9. git diff 与 git diff --cached的不用

    git diff比较的是工作目录中当前文件和暂存区域快照之间的差异, 也就是修改之后还没有暂存起来的变化内容.若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命 ...

  10. 【Redis】主从同步

    Redis提供了主从复制功能,主要是为了保证服务的高可用性.在redis.conf配置文件中通过设置,可以开启主从复制功能.或者在客户端中使用slaveof 命令开启该功能. slaveof < ...