我也是刚刚学习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;
}
以上是两个更新的方式,期望大家多做写补充。