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