2017-08-03 6 views
0

J'écris une application web en utilisant C# et MongoDB. Afin de mettre à jour un document que j'ai écrit un code qui ressemble à ceci:Robomongo ne semble pas mettre à jour les documents

public MyType Update(MyType obj) { 
    ... 
    var oFilter = Builders<MyType>.Filter.Eq(o => o.MyId, obj.MyId); 
    var oResult = oCollection.FindOneAndReplace(oFilter, obj); 
    if(oResult!=null) 
     Console.Writeline("object to update found"); 
    ... 
    return oResult; 
} 

La classe MyType ressemble à ce

[DataContract] 
public class MyType 
{ 
    [DataMember(Name="_id")] 
    [BsonId(IdGenerator = typeof(CombGuidGenerator))] 
    public Guid MyId { get; set; } 
    ... 
} 

Le code compare fondamentalement la _id de obj avec le _id de chaque document la collection, et si elle trouve une correspondance, elle effectue la mise à jour. Le programme semble fonctionner correctement mais quand je vérifie Robomongno l'objet n'est pas mis à jour, même quand l'objet à mettre à jour a été trouvé.

+0

Je viens de découvrir qu'il met à jour le premier document de la collection. – nix86

Répondre

0

Vous utilisez FindOneAndReplace qui MongoDB dit "trouve un seul document et remplace atomiquement", c'est pourquoi vous mettez à jour le premier. Ce que vous avez probablement besoin est et UpdateMany() donc peut-être

public MyType Update(MyType obj) { 
     ... 
     var oFilter = Builders<MyType>.Filter.Eq(o => o.MyId, obj.MyId); 
     var oResult = oCollection.UpdateMany(
           { o.MyId: obj.MyId }, 
           { $set: { "MyFieldName" : MyValue} } 

              ); 
     if(oResult!=null) 
      Console.Writeline("object to update found"); 
     ... 
     return oResult; 
    } 

mais je ne suis pas sûr de savoir comment utiliser la méthode UpdateMany(). Check out https://docs.mongodb.com/v3.2/reference/method/db.collection.updateMany/