MongoDB——更新操作(Update)c#实现
来源:互联网 发布:淘宝杜蕾斯授权店 编辑:程序博客网 时间:2024/06/07 00:57
c#实现 Mongodb存储【文档局部更新】
如下:
递归更新字段 ,构建UpdateDefinition
/// <summary> /// 构建更新操作定义 /// </summary> /// <param name="bc">bsondocument文档</param> /// <returns></returns> private List<UpdateDefinition<BsonDocument>> BuildUpdateDefinition(BsonDocument bc, string parent ) { var updates = new List<UpdateDefinition<BsonDocument>>(); foreach (var element in bc.Elements) { var key = parent == null ? element.Name : $"{parent}.{element.Name}"; var subUpdates = new List<UpdateDefinition<BsonDocument>>(); //子元素是对象 if (element.Value.IsBsonDocument) { updates.AddRange(BuildUpdateDefinition(element.Value.ToBsonDocument(), key)); } //子元素是对象数组 else if (element.Value.IsBsonArray) { var arrayDocs = element.Value.AsBsonArray; var i = 0; foreach (var doc in arrayDocs) { if (doc.IsBsonDocument) { updates.AddRange(BuildUpdateDefinition(doc.ToBsonDocument(), key + $".{i}")); } else { updates.Add(Builders<BsonDocument>.Update.Set(f => f[key], element.Value)); continue; } i++; } } //子元素是其他 else { updates.Add(Builders<BsonDocument>.Update.Set(f => f[key], element.Value)); } } return updates; }
注意其中key的构建,针对文档包含的子文档,需要对其key添加到根节点的路径。针对包含文档数组的,需要添加下标,指定到对应的标签进行数据的更新。
调用更新操作,更新多份文档操作如下:
/// <summary>更新</summary> public async Task<IEnumerable<string>> UpdateAsync(MetadataCollection metadatas) { List<string> result = null; var kmds = metadatas.Select(e => e.As<Metadata>()).ToList(); var docs = kmds.ConvertAll(DicConvertToBsonDoc); var updateOptions = new UpdateOptions { IsUpsert = true }; try { foreach (var doc in docs) { var filter = Builders<BsonDocument>.Filter.Eq(f => f[iiid], doc[iiid]); var update = Builders<BsonDocument>.Update.Combine(BuildUpdateDefinition(doc,null)); await _access.UpdateAsync(filter, update, updateOptions); } result = metadatas.Select(s => s.IIId).ToList(); } catch (Exception ex) { IndexExceptionCodes.UpdatingIndexFailed.ThrowUserFriendly(ex.Message, "更新索引失败"); } return result; }
其中,先将给定的模型列表转化为Mongodb的文档对象BsonDocument,然后执行更新操作。指定操作如果key不存在执行插入操作。
示例如下:
Step1:查看原文档
Step2:执行更新操作
Step3:查看更新之后的结果
参考如下:
MongoDB更新包含对象数组的元素:
使用mongodb中数组元素的下标来做更新(update)多维数组
例如有如下数据结构:
{
"_id":ObjectId("4b97e62bf1d8c7152c9ccb74"),
”comments“:[
{
"by":"joe",
"votes":3,
"replies":[
{"by":"jane",
"votes":2
}]
}]
}
如果要将"replies"中{“by”:"jane"}的投票数增加1,该如何做呢?
mongodb使用多维数组下标的方式来定位某个元素
先find({"comments.replies.by":"jane"})来获取到整个object,
然后计算相应reply的数组下标,
再使 用update({"comments.0.replies.0.by":"jane"},{"$inc", {"comments.0.replies.0.votes":1}})
0 0
- MongoDB——更新操作(Update)c#实现
- C# 中 MongoDB 更新操作
- Mongodb数据更新命令(update、save)
- [MongoDB]Update更新数据
- MongoDB学习 (五):更新操作符(Update Operators).2nd
- MongoDB更新update:实现value=value*0.8
- mongodb 实现添加新字段(使用更新操作)
- Mongodb的update操作
- mongodb 数据库update 操作
- Mongodb的update操作
- Mongodb的update操作
- mongoDB update操作
- Mongodb的update操作
- mongodb update操作
- Mongodb的update操作
- Mongodb的update操作
- Mongodb的update操作
- MongoDB 操作手册CRUD 更新 update
- android手机获取手机设备信息
- Linux下高效编写Shell——shell特殊字符汇总
- php中字符串引用变量或数组
- 语法糖创建数组的区别
- shell中的输入与输出
- MongoDB——更新操作(Update)c#实现
- 关于MFC中树形控件(CTreeCtrl)复选框(CheckBox)的显示一致性解决方案
- AngularJS开发环境搭建,出hello word
- centos fastdfs 多服务器 多硬盘 多组 配置详解
- Xception Deep Learning with Depthwise Separable Couvolutions
- tar 分卷压缩 解压
- spring 中 applicationEvent的使用
- 20161215-弹出层·参考问卷星
- MFC笔记:切换窗口