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

Mongo zobrazuje chybu duplicitního klíče v poli _id_ v aplikaci Meteor

To váš problém nevyřeší, ale mělo by vás to nasměrovat správným směrem a možná vám to umožní izolovat problém, který můžete použít k vytvoření nové otázky:

Není. Existuje pouze jeden index, který má název a deskriptor klíče. To není totéž. jméno výchozího indexu je _id_ , jeho klíč je _id .

_id se obvykle vytváří na straně klienta, nikoli na straně serveru. Otázkou je, odkud tyto klíče pocházejí, protože 2ZGvRfuD8iMvRiXJd určitě není ObjectId . Může to být meteorický klíč nebo používáte nějaký vlastní primární klíč, ale nevím, jak se tyto klíče generují. Je možné, že cokoliv generuje klíč, je náchylné ke kolizím?

Více informací o tom by bylo užitečné, ale doporučil bych formulovat novou otázku, aby se otázka příliš nezvětšila a nezískala mnoho historie.

To je lemma první odpovědi:Nemůžete smazat povinný index primárního klíče.

Upravit:

Meteor ve výchozím nastavení generuje ID jiným způsobem než MongoDb . To dává smysl, protože konvence pro ObjectId činí kolize pravděpodobnou, pokud je počet klientů velký (tj. pokud klienty nejsou instance serveru, ale klientské prohlížeče, kterých je pravděpodobně o 2-3 řády více).

Místo toho Meteor zjevně používá metodu pro konzistentní generování pseudonáhodných čísel na klientovi a serveru . Je nepříjemné, že implementace používá PRNG a spadá zpět do ne krypto-silný deterministický generátor náhodných čísel (Alea) . Jinými slovy, zjistit, jak přesně generování vašich ID může být složité, protože to závisí na mnoha detailech vašeho prostředí.

Řešení:Zkuste použít ObjectId jako primární klíč:

Orders= new Meteor.Collection('Orders', {idGeneration: 'MONGO'});


  1. jak hledat v kolekci mongodb klíče slovníku vnořené v poli

  2. Ukládejte obrázky v Mongodb a podávejte je pomocí Nodejs

  3. Správné skrytí přihlašovacích údajů k databázi

  4. Nainstalujte mongodb na hostitele Azure devops pro testrun