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. 。。。