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

Странно поведение на MongoDB LINQ доставчик за полета, наречени id

MongoDB изисква всеки документ, съхраняван в базата данни, да има поле (на основно ниво), наречено „_id“.

C# драйверът предполага, че всяко поле във вашия клас, наречено "Id", "id" или "_id", е предназначено да бъде картографирано към специалното поле "_id". Това е конвенция, която може да бъде отменена. C# драйверът не знае, че вашият клас Result не е предназначен да се използва като основен документ на колекция, така че намира вашето поле "id" и го съпоставя с "_id" в базата данни.

Един от начините, по който можете да отмените това, е да промените името на полето във вашия клас (както открихте). Това, което можете да направите след това, е да използвате атрибута [BsonElement], за да съпоставите името на полето на C# (напр. „idd“) към каквото име действително се използва в базата данни (напр. „id“). Например:

public class Result
{
    [BsonElement("id")]
    public int idd; // matches "id" in the database
    // other fields
}

Друга алтернатива е да замените конвенцията, която намира члена "Id" на клас, за да потиснете поведението по подразбиране на C# драйвера за вашия клас Result. Можете да направите това, като регистрирате нов ConventionProfile за вашия клас Result. Например:

var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));

Трябва да сте сигурни, че сте направили това много рано във вашата програма, преди класът ви за резултати да бъде картографиран.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Конфигуриране на QueryDSL за Spring Data и MongoDB с Gradle

  2. mongo db docker изображение неуспешно удостоверяване

  3. MongoDB GUI клиент (кросплатформен или Linux)

  4. промяна на типа mongodb в масив

  5. Как да получите списък с колекции в mongoose?