c# 操作mongodb时注意事项

1.空值的处理

先简单介绍下  Collection.Insert方法,这里面有一个逻辑:如果Collection中对象存在就只插入数据,如果不存在先创建对象然后插入数据。

问题:如果mongo不存在对象,当使用insert插入时,如果对象的某个字段为null值(C#中的类型),mongodb中是不会插入该字段的,如果是一个list对象,只要有一个对象有值就会插入该字段。即字段为null,Collections对象是不会有这个字段的,另在update时如果字段为null值就会报错。

此时有两种处理方式:

a.使用save方法 (用作更新时有一定的风险,见下面注释)

 注释:db.collection.save(obj)

obj代表需要更新的对象,如果集合内部已经存在一个和obj相同的"_id"的记录,Mongodb会把obj对象替换集合内已存在的记录,如果不存在,则会插入obj对象。

b. .Set("Description", (BsonValue)test.Description ?? BsonNull.Value)  // 把null值转换为mongodb支持的类型。


2.mongo在执行批量更新(查询、删除类似)时,一定要注意字段类型 如下:

public void UpdateTest(string Ids, int visibility)
{
    var ids = Ids.Split(',');
    var id = Array.ConvertAll(ids, new Converter<string, long>(StrToLong));//要转换为long 否则更新不成功,即已经string类型的id 是查不到数据的
    var query = Query.In("_id", Array.ConvertAll(id, item => (BsonValue)item));
    var update = Update.Set("Visibility", visibility));
    _test.Collection.Update(query, update);
}
private long StrToLong(string str)
{
           long res=0;
           long.TryParse(str,out res);
           return res;
}


如果不通过 Array.ConvertAll(ids, new Converter<string, long>(StrToLong));转换,直接用传入的数据,其结果就是不会有任何数据更新,如果是查询结果就是查不到任何数据。

3.数据大小写。例如存入了name="Ray",那通过ray查询时查不到数据的。(类似oracle)

4. 。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值