2016-06-08 3 views
0

Как преобразовать этот SQL в MongoDB запрос с использованием C# DriverMongoDB C# Driver Обновление коллекция с каскадной строкой

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

Использования MongoDB.Driver 2.2.3.3

мне нужен MongoDB запрос с использованием типа BsonDocument, я не имеют сильных типов для моих монгольских коллекций, поскольку коллекция не основана на фиксированной схеме.

Пытаясь что-то вроде этого

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

Это будет мой Shell Script

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

затем выполнить его в C# с RunCommandAsync методом из MongoDatabase.

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

Примечание: вам нужно будет изменить командную строку с помощью конвейеров и проанализировать ее на BsonDocument.