Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

519
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda