C#用MongoDB官方的驱动,UpdateManyAsync如何修改多个元素?

cnwolfs 2016-03-21 01:37:51




//要修改的这个记录的内容,就是要把name修改为jack4,同时要修改Addr等其它元素。
var mDocument = new MongoDB.Bson.BsonDocument
{
{ "name" , "jack3"},
{ "age", 40},
{"Addr" , "Jack4 111" }
};

var mFilter = Driver.Builders<Bson.BsonDocument>.Filter.Eq("name", "jack3") & Driver.Builders<Bson.BsonDocument>.Filter.Eq("age", 40);
var mUpdateDocument = Driver.Builders<Bson.BsonDocument>.Update.Set("name", "jack4");

await DataComet.DBDrivers.UpdatePrimer.UpdateManyAsync(mFilter, mUpdateDocument, "person", mDatabaseName, mConnectionString);



代码如上,问题在Update.Set("name", "jack4")只能指定一个修改的元素,我同时还想修改Addr、Age等元素的内容,如何一次性修改完成?
例如改成:
{
{ "name" , "jack3"},
{ "age", 100},
{"Addr" , "555555" }
};


...全文
898 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdnFUCKINGSUCKS 2016-04-10
  • 打赏
  • 举报
回复
引用 8 楼 cnwolfs 的回复:
对了,那个帮助文档哪里能下载到本地看的?通过他们的网页看比较费劲,搜索功能很差。
mongodb C#的驱动,压缩包里有帮助文档。
cnwolfs 2016-04-10
  • 打赏
  • 举报
回复
Combine Save 这两个之后测试下,先结贴了,现在很少很少来csdn玩,之后又会忘记结贴。 上头注释的var mUpdateDefinition 两行代码,和没有注释的两行代码均能完成相同的工作。
cnwolfs 2016-04-10
  • 打赏
  • 举报
回复
对了,那个帮助文档哪里能下载到本地看的?通过他们的网页看比较费劲,搜索功能很差。
cnwolfs 2016-04-10
  • 打赏
  • 举报
回复

using MongoDB.Driver;   //这里一定要using,否则下面就不会有Set().Set()的方法了!!!!!

  	private void Update_Click(object sender, EventArgs e)
        {
            MongoDBHelper mongo = new MongoDBHelper("mongodb://127.0.0.1", "mydb", "test");

            string json = "{ 'ext.addr':'中国'}";
            var mFilter = BsonDocument.Parse(json);

            //var mUpDefinitionBuilder = new UpdateDefinitionBuilder<BsonDocument>();
            //var mUpdateDefinition = mUpDefinitionBuilder.Set("ext.addr", "地球").Set("name", "张三");

            var mUpdateDefinition = BsonDocument.Parse("{$set:{'name':'张三','ext.addr':'地球'}}");

            mongo.Update(mFilter, mUpdateDefinition);
        }

  • 打赏
  • 举报
回复
使用 Update.Combine 函数可以将多个 Update.Set 组合成为一个。
  • 打赏
  • 举报
回复
如果你要更新一个文档,那么使用 Save 方法就行了。只有你要更新文档中个别字段(而不是整个文档)时才使用这个语法。
cnwolfs 2016-04-10
  • 打赏
  • 举报
回复
没找到Set().Set()的写法
cnwolfs 2016-04-10
  • 打赏
  • 举报
回复
引用 1 楼 ducker3590 的回复:
链式调用即可。 set完一个元素后继续set。

var mUpdateDocument = Driver.Builders<Bson.BsonDocument>.Update.Set("name", "jack4").Set("age", 100).Set("Addr", "555555");
官方Diver的帮助文档里有提到。
好像是传入List也可以,谢谢,最近都没人回答这个,所以都没上来看。 等会儿我测试下,然后把我的测试发上来
csdnFUCKINGSUCKS 2016-03-21
  • 打赏
  • 举报
回复 1
链式调用即可。
set完一个元素后继续set。

var mUpdateDocument = Driver.Builders<Bson.BsonDocument>.Update.Set("name", "jack4").Set("age", 100).Set("Addr", "555555");

官方Diver的帮助文档里有提到。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧