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'});