Estoy almacenando el objeto de clase en mongodb como se muestra a continuación,

try
{
    Sample risk = new Sample();
    risk.Name = "ABC";
    risk.Enable = true;
    risk.Sender = "IBM";
    risk.Target = "CITI";
    MongoServer server = MongoServer.Create("mongodb://localhost");
    MongoDatabase db = server.GetDatabase("DATABASE");
    db.GetCollection<StockQuote>("SMAPLETABLE").Insert(risk);
}
catch (Exception e)
{
    MessageBox.Show("Error");
}

Ahora quiero actualizar esa misma instancia de clase como db.GetCollection<StockQuote>("SMAPLETABLE").Insert(risk); ¿cómo puedo hacer esto?

0
user483886 22 dic. 2011 a las 14:37

1 respuesta

La mejor respuesta

Hay dos enfoques de dos documentos de actualización:

1.A través del método Save y actualice el documento etire

db.GetCollection<StockQuote>("SMAPLETABLE").Save(risk);

2. A través de actualización atómica: actualice parte del documento. Por ejemplo, si necesita actualizar el campo Enable del documento con Name "ABC":

db.GetCollection<StockQuote>("SMAPLETABLE").Update(
                                        Query.EQ("Name", "ABC"),
                                        Update.Set("Enable", false));

Algunas notas:

  1. Con las actualizaciones atómicas puede evitar problemas de simultaneidad. La actualización atómica es como una transacción dentro de un documento.
0
Andrew Orsich 22 dic. 2011 a las 15:14
Si estoy usando el método SAVE, la tabla de id mongo tiene 4 registros, ¿cómo puedo actualizar solo un registro en particular? @ Andrew Orsich
 – 
user483886
22 dic. 2011 a las 15:18
@ user483886: cuando usas Save, en realidad estás actualizando un solo documento. El campo _id es único en toda la colección.
 – 
Andrew Orsich
22 dic. 2011 a las 15:21
Pero, ¿cómo sé ese documento en particular al actualizar, si menciono esa identificación ...? @ Andrew Orsich
 – 
user483886
22 dic. 2011 a las 15:23
¿Puedes enviar un código de muestra para actualizar todo el documento a la vez? @Andrew Orsich
 – 
user483886
22 dic. 2011 a las 15:29
Para actualizar el documento completo, primero debe cargarlo desde la base de datos. Puede usar FindOneAs<> por ejemplo: db.GetCollection<StockQuote>("SMAPLETABLE").FindOneAs<StockQuote>(Query.EQ("Name", "ABC"));
 – 
Andrew Orsich
22 dic. 2011 a las 15:46