我也是剛剛學習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;
}
以上是兩個更新的方式,期望大家多做寫補充。