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" }
};


...全文
193 点赞 收藏 9
写回复
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);
        }

回复 点赞
以专业开发人员为伍 2016年04月10日
使用 Update.Combine 函数可以将多个 Update.Set 组合成为一个。
回复 点赞
以专业开发人员为伍 2016年04月10日
如果你要更新一个文档,那么使用 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日
链式调用即可。
set完一个元素后继续set。

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

官方Diver的帮助文档里有提到。
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告