具有连接字符串的MongoDB C#驱动程序更新集合

时间:2016-06-08 17:21:38

标签: mongodb mongodb-.net-driver

如何使用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);
                }

1 个答案:

答案 0 :(得分:0)

这将是我的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。