【问题标题】:MongoDB C# Driver Update Collection with Concatenated string带有连接字符串的 MongoDB C# 驱动程序更新集合
【发布时间】:2016-06-08 17:21:37
【问题描述】:

如何使用 C# 驱动程序将此 SQL 转换为 MongoDB 查询

UPDATE  dbo.MyTable SET ConcatField = CONCAT(Field1, Field2, Field3, Field4, Field5)
WHERE Id = 21 

使用 MongoDB.Driver 2.2.3.3

我需要使用 BsonDocument 类型的 MongoDB 查询,我的 Mongo 集合没有强类型,因为 Collection 不是基于固定模式。

尝试这样的事情

var items = myCollection.FindSync(filter).ToList();
                foreach (var item in items)
                {
                    UpdateDefinition<BsonDocument> updateDefinition =
                        new BsonDocumentUpdateDefinition<BsonDocument>(item.Merge(ListOfStrinForSelectedFields.ToBsonDocument()));
                    myCollection.UpdateManyAsync(filter, updateDefinition);
                }

【问题讨论】:

    标签: mongodb mongodb-.net-driver


    【解决方案1】:

    这将是我的 Shell 脚本

    var cursor = db.MyCollection.find({ "Id": 21 }), // Or what ever your find conditions is 
        bulkUpdateOps = [];
    
    cursor.forEach(function(doc){ 
        var ConcatField = doc.Field1 + doc.Field2 + doc.Field3 ;
        bulkUpdateOps.push({ 
            "updateOne": {
                "filter": { "_id": doc._id },
                "update": { "$set": { "MyConCatField": ConcatField  } }
             }
        });
    
        if (bulkUpdateOps.length == 1000) {
            db.MyCollection.bulkWrite(bulkUpdateOps);
            bulkUpdateOps = [];
        }
    });         
    
    if (bulkUpdateOps.length > 0) { db.MyCollection.bulkWrite(bulkUpdateOps); }
    

    然后使用来自 MongoDatabase 的 RunCommandAsync 方法在 c# 中执行它。

    var result = await mongoDatabase.RunCommandAsync<BsonDocument>(BsonDocument.Parse(command));
    

    注意:您必须使用管道修改命令字符串并将其解析为 BsonDocument。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2022-01-13
      相关资源
      最近更新 更多