sql >> Databáze >  >> NoSQL >> MongoDB

Expozice MongoDB ObjectIds

Krátká verze:ano, všude používejte String.

Pokud jste v pořádku s poznámkami, použijte :

[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

Jinak můžete použít mapu třídy :

BsonClassMap.RegisterClassMap<i_YourModel>(cm =>
 {
  cm.AutoMap();
  cm.SetIdMember(cm.GetMemberMap(x => x.Id)
    .SetIdGenerator(StringObjectIdGenerator.Instance));
 }
);

Dlouhá verze:

Je vhodné použít něco neprůhledného, ​​co není přímo spojeno s implementací podkladové databáze, ve vaší vrstvě modelu a služeb co nejvíce (pokud je to možné).

Dříve byla ID primárního klíče obvykle velká čísla, která byla poté mapována do sloupce primárního klíče v databázi. Při přiřazování nového id nové entitě však bylo nutné provést kontrolu databáze, aby bylo zajištěno jedinečné id. Existuje mnoho technik, od generátorů ID LO-HI přes sloupce auto_increment až po sekvence atd.

S NoSQL a potřebou většího paralelismu nyní většina aplikací používá UUID nebo jeho varianty, protože ID lze vygenerovat s rozumnou pravděpodobností, že bude jedinečné, aniž byste se museli ptát databáze, zda je skutečně jedinečné, nebo používat sekvence nebo podobně, což jsou úzká místa v aplikaci, která se škáluje horizontálně.

MongoDB není žádný rozdíl a používá ObjectId, což jsou jakési UUID.

Tato id (mongo i další) mohou být vždy reprezentována jako řetězce, obvykle HEX reprezentace bajtů tvořících klíč. Takže ve svém modelu použijte řetězec jako ID, ve vrstvě služeb to samé, ve své datové vrstvě jej převeďte do jakéhokoli formátu, který je lepší pro vaši základní implementaci databáze, v tomto případě MongoDB.



  1. Získání rozdílu v sekundách od dvou dat v JavaScriptu

  2. Připojte NodeJS k MongoDB Droplet

  3. Nelze předat hodnotu parametru do repozitáře findOneBy Symfony

  4. Jak seřadit kolekci pomocí posledního prvku pole