MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Добавяне в Mongo DB и проблемът с идентификатора

Срещнах подобен проблем. Исках да вмъкна документи с помощта на официалния C# драйвер. Имах клас като този:

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

В конзолата бих написал:db.collection.update({Field1: 3},{Field1: 3, Field2: "value"}) и щеше да работи. В C# написах:

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

и не се получи! Тъй като драйверът включва празен идентификатор в израза за актуализация и когато вкарам втори документ с различна стойност на изключение на Field1 E11000 duplicate key error index се хвърля (в този случай Mongo се опитва да вмъкне документ с _id, който вече съществува в db).

Когато генерирах _id сам (като начало на тема), срещнах същото изключение (mongo cannot change _id of a document ) при поставяне на обекти със съществуваща стойност на Field1.

Решение е да маркира свойството Id чрез атрибут [BsonIgnoreIfDefault] (и да не го инициализира). В този случай драйверът пропуска полето _id в оператора за актуализиране и MongoDb генерира идентификатор, ако е необходимо.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Какъв е новият начин за настройка на DateTimeSerializationOptions.Defaults в mongodb c# драйвер?

  2. Как да запазя масив от входове към дъщерна схема във вложена мангустова схема?

  3. Уникални идентификатори с mongodb

  4. Как да заредя 100 милиона записа в MongoDB със Scala за тестване на производителността?

  5. Node.js + Mongoose.js Как да получите сумата на поръчките, направени за месец или седмица?