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. Java 输入/输出——处理流(DataInputStream/DataOutputStream、ByteArrayInputStream/ByteArrayOutputStream)

    DataInputStream和DataOutputStream分别继承字节流InputStream和OutputStream,它属于处理流,需要分别“套接”在InputStream和OutputSt ...

  2. Java8 CompletableFuture

    http://colobu.com/2016/02/29/Java-CompletableFuture/ http://www.deadcoderising.com/java8-writing-asy ...

  3. python摸爬滚打之day8---文件操作

    1.文件读写的两种方式 1,  f = open("文件位置",mode = "r", encoding = "utf-8") conten ...

  4. python time模块总结

    常用函数: import time --------------------------------------------------time.time()                      ...

  5. TZOJ:最大连续子序列

    描述 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K.最大连续子 ...

  6. Java与openssl的RSA算法

    1.java生成的公私钥格式为 pkcs8(PKCS8EncodedKeySpec), 而openssl默认生成的公私钥格式为 pkcs1 2.java采用的rsa默认补齐方式是pkcs1 (RSA/ ...

  7. 【WebDriver】WebDriver 常用操作

    WebDriver 常用操作 1 浏览器操作 2 窗口和弹框操作 3 cookies 操作 4 简单对象的定位 5 页面元素操作 6 鼠标事件 7 键盘事件 1 浏览器操作 #属性: driver.c ...

  8. COFF,amd64.vc90.mfc两个布署的问题

    今天解决了两个bug (1)一个是COFF文件损坏,因为装了vs2010和vs2013,搜索C:\Program Files(x86)文件夹下的cvtres.exe.出现了VC10和VC12的4个,x ...

  9. 【LNMP】提示Nginx PHP “No input file specified”错误的解决办法

    原理: 任何对.php文件的请求,都简单地交给php-cgi去处理,但没有验证该php文件是否存在. PHP文件不存在,没办法返回普通的404错误,它返回 一个404,并带上一句”No input f ...

  10. golang 的 math/big 进行

    进行高进度运算的时候unint64已经无法满足需求,这个时候大家可以采用math.big库来进行高进度计算,下面以计算第10000位的菲波纳切数来展示big的用法,代码如下: package main ...