Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

530
Vistas
¿Cómo usar C# para insertar documentos en documentos incrustados existentes?

Tengo la siguiente estructura en C# (un cliente con facturas). Estoy luchando para insertar en un registro mongodb existente. Estoy usando C# .NET 4.5 junto con MongoDB 2.4. Me gustaría insertar una nueva factura en un registro de cliente existente.

Recibo el error "error de clave duplicada" que entiendo, pero no sé cómo agregarlo al objeto Facturas dentro del objeto Cliente.

Cualquier ayuda muy apreciada.

Mi intento

 var client = new MongoClient(); var database = client.GetDatabase("databasename"); var collection = database.GetCollection<Customer>("Customer"); var customerId = ".."; var builder = Builders<Customer>.Filter; var filter = builder.Eq("Id", new ObjectId(customerId)); var matchedRecord = collection.Find(filter).SingleOrDefault(); // Insert new invoice into the customer record matchedRecord.Invoices.Add(new Invoice { InvoiceNumber = "123456" }); collection.InsertOne(matchedRecord); // Error produced below

Error

 E11000 duplicate key error collection: databasename.Customer index: _id_ dup key: { : ObjectId('..') }

Clases

 public class Customer { public ObjectId Id { get; set; } public string CustomerId { get; set; } public List<Invoice> Invoices { get; set; } } public class Invoice { public string InvoiceNumber { get; set; } }

Actualizar

 var builder = Builders<Customer>.Filter; var filter = builder.Eq("Id", new ObjectId(customerId)); // Not sure how to use the FindOneAndUpdate method(?) var matchedRecord = collection.FindOneAndUpdate<Customer>(filter);

Segunda actualización

Intenté lo siguiente pero inserta un nuevo objeto de factura (fuera de Facturas)

 var builder = Builders<Customer>.Filter; var filter = builder.Eq("Id", new ObjectId(customerId)); var update = Builders<Customer>.Update.Set("Invoice.ClientName", "HELLO");

Tercera actualización

Este enfoque sobrescribe las facturas existentes del cliente y las reemplaza con esta factura de "hola". ¿Cómo se puede anexar a las facturas existentes...?

 var update = Builders<Customer>.Update .Set("Invoices", new Invoice { ClientName = "HELLO" }); var result = collection.UpdateOneAsync(filter, update);
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Esto funciona, observe el uso de Push; de lo contrario, es lo mismo que el enfoque establecido anterior (consulte la tercera actualización)

 var update = Builders<Customer>.Update.Push("Invoices", new Invoice { ClientName = "HELLO" }); var result = collection.UpdateOneAsync(filter, update);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda