MongoDB的更新问题 二

我也是刚刚学习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;
        }

以上是两个更新的方式,期望大家多做写补充。

 






 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值