MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Przewracanie się w Mongo DB i problem z Id

Spotkałem się z podobnym problemem. Chciałem upsertować dokumenty za pomocą oficjalnego sterownika C#. Miałem takie zajęcia:

public class MyClass
{
    public ObjectId Id { get; set; }
    public int Field1 { get; set; }
    public string Field2 { get; set; }
}

W konsoli napisałbym:db.collection.update({Field1: 3},{Field1: 3, Field2: "value"}) i to zadziała. W C# napisałem:

collection.Update(Query.EQ("Field1", 3),
                Update.Replace(new MyClass { Field1 = 3, Field2 = "value" }),
                UpdateFlags.Upsert);

i to nie zadziałało! Ponieważ sterownik zawiera pusty identyfikator w instrukcji aktualizacji i kiedy wstawiam drugi dokument z inną wartością wyjątku Field1 E11000 duplicate key error index zostanie wyrzucony (w tym przypadku Mongo próbuje wstawić dokument z _id, który już istnieje w db).

Kiedy sam wygenerowałem _id (jak starter tematu) napotkałem ten sam wyjątek (mongo cannot change _id of a document ) przy wstawianiu obiektów z istniejącą wartością pola 1.

Rozwiązanie jest oznaczenie właściwości Id przez atrybut [BsonIgnoreIfDefault] (i nie inicjować). W tym przypadku sterownik pomija pole _id w instrukcji aktualizacji, a MongoDb generuje identyfikator, jeśli jest to konieczne.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zdecydować, której technologii NoSQL użyć?

  2. Ten węzeł nie został uruchomiony z opcją replSet

  3. Radzenie sobie z unikalnymi, rzadkimi, złożonymi indeksami mongodb

  4. Jak poprawnie połączyć się z klastrem Atlas M0 (Free Tier) za pomocą sterownika Java?

  5. Aktualizacja MongoDB()