使用MongoDB修改数据时,需要先定义过滤条件,找到要修改的行,再定义修改内容
同步修改一行记录
在MongoDBMgr
里面添加Update
方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #region 修改数据
public UpdateResult Update<T>(T entity,string collName ,string objectId) where T : class, new() { try { var collection = m_Database?.GetCollection<T>(collName); FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id",new ObjectId(objectId)); var list = new List<UpdateDefinition<T>>();
foreach (var item in entity.GetType().GetProperties()) { if(item.Name.ToLower() == "_id") continue; list.Add(Builders<T>.Update.Set(item.Name,item.GetValue(entity))); } var updatefilter = Builders<T>.Update.Combine(list); return collection!.UpdateOne(filter, updatefilter); } catch (Exception ex) { Debug.LogError("修改数据出错:" + ex); throw; } } #endregion
|
异步修改一行记录
前面都一样,最后调用UpdateOneAsync
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
public async Task<UpdateResult> UpdateAsync<T>(T entity, string collName, string objectId) where T : class, new() { try { var collection = m_Database?.GetCollection<T>(collName); FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", new ObjectId(objectId)); var list = new List<UpdateDefinition<T>>();
foreach (var item in entity.GetType().GetProperties()) { if (item.Name.ToLower() == "_id") continue; list.Add(Builders<T>.Update.Set(item.Name, item.GetValue(entity))); } var updatefilter = Builders<T>.Update.Combine(list); return await collection!.UpdateOneAsync(filter, updatefilter);
} catch (Exception ex) { Debug.LogError("异步修改数据出错:" + ex); throw; } }
|
同步批量修改记录
在MongoDBMgr
里面添加UpdateMany
方法,核心API是使用collection!.UpdateMany
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
public UpdateResult UpdateMany<T>(string collName, Dictionary<string,string> dic, FilterDefinition<T> filter) where T : class, new() { try { var collection = m_Database?.GetCollection<T>(collName); T t = new T(); var list = new List<UpdateDefinition<T>>(); foreach (var item in t.GetType().GetProperties()) { if(!dic.ContainsKey(item.Name)) continue; var value = dic[item.Name]; list.Add(Builders<T>.Update.Set(item.Name, value)); } var updatefilter = Builders<T>.Update.Combine(list); return collection!.UpdateMany(filter,updatefilter);
} catch (Exception ex) { Debug.LogError("批量修改数据出错:" + ex); throw; } }
|
这里批量修改其实是体现在这个方法的filter参数上,设定一个能修改多行的条件就好了。
异步批量修改记录
在MongoDBMgr
里面添加UpdateManyAsync
方法,核心API是使用collection!.UpdateManyAsync
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
public async Task<UpdateResult> UpdateManyAsync<T>(string collName, Dictionary<string, string> dic, FilterDefinition<T> filter) where T : class, new() { try { var collection = m_Database?.GetCollection<T>(collName); T t = new T(); var list = new List<UpdateDefinition<T>>(); foreach (var item in t.GetType().GetProperties()) { if (!dic.ContainsKey(item.Name)) continue; var value = dic[item.Name]; list.Add(Builders<T>.Update.Set(item.Name, value)); } var updatefilter = Builders<T>.Update.Combine(list); return await collection!.UpdateManyAsync(filter, updatefilter); } catch (Exception ex) { Debug.LogError("异步批量修改数据出错:" + ex); throw; } }
|