Pregunta

Quiero usar el operador posicional del MongoDB en el código C#. Aquí hay una estructura de datos para el cliente:

{ 
  name:"Robert", 
  age:40, 
  addresses:[ 
    {street:"...", city:"New York", country:"USA", ...}, 
    {street:"...", city:"California", country:"USA", ...},
  ],
}

Entonces, si quiero actualizar el valor de la calle donde la dirección si es de la ciudad de Nueva York, uso esta consulta en MongoDB:

db.customer.update(
   { "addresses.city" : "New York"}, 
   { $set : {
       "addresses.$" : {"street":"New street", city:"New York", country:"USA",...}
   } }, false, true);

¿Cuál es la consulta equivalente para usar en el código C#? ¿Cómo usar el operador posicional en el código C#?

Estoy usando el conductor oficial de MongoDB.

¿Fue útil?

Solución

Escribirías eso en C# así:

var newAddress = new BsonDocument
{
    { "street", "New street" },
    { "city", "New York" },
    { "country", "USA" }
    // ...
};
var query = Query.EQ("addresses.city", "New York");
var update = Update.Set("addresses.$", newAddress);
var result = customerCollection.Update(query, update, UpdateFlags.Multi);

Eso parece una actualización peligrosa para hacer; ¿Estás sobrescribiendo una dirección de la calle basada solo en la coincidencia de la ciudad? ¿La consulta funciona correctamente en el shell Mongo?

Otros consejos

El operador posicional es algo interno de las actualizaciones atómicas de MongoDB, por lo que no hay diferencia para una actualización atómica simple y actualización con Posicional Operator.

El equivalente de la sintaxis de caparazón de Mongo en C# sería:

var collection = database.GetCollection<Customer>("customer");
var searchQuery = Query.EQ("addresses.city", "New York");
var address = new Address()
{
  street = "New street",
  city = "New York",
  country = "USA"
};
var update = Update.Set("addresses.$", address.ToBsonDocument())
collection.Update(searchQuery, update, UpdateFlags.Multi);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top