MongoDB的更新問題 二

來源:互聯網
上載者:User

我也是剛剛學習MongoDB資料庫,有很多問題我也沒有弄明白。今天我們就說說更新問題吧,可能是因為我慣了關係型資料庫的原因吧,操作的思想總是往那裡靠。

先說一下資料庫中得更新命令Update。

1. update()命令

db.collection.update( criteria, objNew, upsert, multi )

criteria : update的查詢條件,類似sql update查詢內where後面的
objNew   : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的
upsert   : 這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
multi    : mongodb預設是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。

例子:

db.test0.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 只更新了第一條記錄
db.test0.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 全更新了
db.test0.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 只加進去了第一條
db.test0.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 全加進去了

 

2.  驅動操作 samus

 

可能是小弟還沒有才疏學淺,還沒有更深層次的瞭解samus驅動,先說一下我知道的吧。

 

我發現這個驅動的Update方法,是通過集合進行總體的更新,也就是說如果我想更新其中一個欄位就得更新整個集合,

        public int Delete(string user_id)
        {

            using (MyMongoDb mdb = new MyMongoDb())
            {
                var collection = mdb.GetCollection<USER>();

                var category = collection.FindOne(x => x.USERID == user_id);
                category.is_del = 1;

                collection.Update(category, new Document { { "USERID", user_id } });
            }

        }
我是先通過userid查詢到這條記錄,在更改對象的值,在進行更新。

 

但是批次更新應該怎麼辦呢?

比如我想更新性別是男性的使用者is_del=1;

 

我是用的笨辦法,先查詢在迴圈更新。如果大家有更好的辦法,請給我留言共同學習一下。

        public int Delete(int sex)
        {
            using (MyMongoDb mdb = new MyMongoDb())
            {
                var collection = mdb.GetCollection<USER>();
                var category = collection.Find(x => x.SEX == sex).Documents.ToList<USER>();
                foreach (USER u in category)
                {
                   u.is_del = 1;
                    collection.Update(u, new Document { { "USERID", u.USERID } });
                }

            }

            return 1;
        }

以上是兩個更新的方式,期望大家多做寫補充。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.