2016-03-21 14 views
1
const string Pattern = @"(?si)<([^\s<]*totalWork[^\s<]*)>.*?</\1>"; 
var filter = Builders<JobInfoRecord>.Filter.Regex(x => x.SerializedBackgroundJobInfo, 
              new BsonRegularExpression(Pattern, "i")); 

var documents = await records.Find(filter).ToListAsync(); 

====Mongo tarafındaki belgeler nasıl güncellenir? Ben <code>documents</code> aldıktan sonra

yanımda her doküman ile çalışıyor.

const string EmptyTag = "<$1></$1>"; 
var updatedJobInfo = Regex.Replace(document.SerializedBackgroundJobInfo, Pattern, EmptyTag); 

Mongo tarafında nasıl Regex.Replace yapabilirim? Yoksa bu sadece müşteride olabilir mi?

Aşağıdaki Replace Mongo tarafında çalışıyor mu?

using (var cursor = await jobInfoDocuments.FindAsync<JobInfoRecord>(filter)) 
{ 
     while (await cursor.MoveNextAsync()) 
     { 
      var batch = cursor.Current; 
      foreach (var document in batch) 
      { 
       var newInfo = Regex.Replace(document.SerializedBackgroundJobInfo, regex, EmptyTag); 

        // Applying several operations within the one request. 
        operationList.Add(new UpdateOneModel<JobInfoRecord>(Builders<JobInfoRecord>.Filter.Eq("_id", document.JobId), 
                     Builders<JobInfoRecord>.Update.Set("SerializedBackgroundJobInfo", newInfo))); 
       } 
+0

Ouch kabuk çalışmak için filter düzeltmek javascript ile bunu ancak emin olabiliriz! Açıkça, bu soruya, ödülün gönderilmesinden önce bir kopya olarak kapatılmış olmalıdır. Bkz. [MongoDB: Belgeleri aynı belgeden kullanarak güncelleme] (http://stackoverflow.com/a/3792958/2313887) Bu, kabul edilen yanıtta yeniden adlandırılan alanın küçük bir yapısını değil, "döngü" anlamına gelir. Burada yapmanız gereken tek pratik şudur: [Mongo'daki güncelleme işleminin performansı nasıl artırılır?] (Http://stackoverflow.com/a/36191579/5031275) –

+1

Regex.replace desteklenmiyor. MongoDB sunucu tarafı özel ihtiyaçlarınız varsa, istemci tarafında yapılmalıdır. – Saleem

cevap

1

Sen Mongo

db.records.find(filter).forEach(function (doc) { 
 
    var pattern = /<([^\s<]*totalWork[^\s<]*)>[\s\S]*?</\1>/i; 
 
    var EmptyTag = "<$1></$1>"; 
 
    
 
    doc.SerializedBackgroundJobInfo = doc.SerializedBackgroundJobInfo.replace(pattern, EmptyTag); 
 
    
 
    db.records.save(doc); 
 
})

+0

Peki ya C#? – Anatoly

+0

C# mongo sürücüleri ile aşina değilim, ama sadece doğal javascript komutları göndermek için bir yol bulmak C# – TomG

+0

Güncellenen soruma bakın. Sence Mongo tarafında mı çalışıyor? – Anatoly

İlgili konular