Promiňte, nerozuměl jsem vaší otázce na začátku, a proto jsem odpověděl špatně (děkuji cababunga za upozornění). Takže tady je ten správný.
Mongoshell podporuje různé typy dat . A pokusí se uhodnout váš datový typ, když jej zadáte. Zadáte tedy své velké číslo:138548488276343678 . Všimněte si, že je větší než 2^31-1, což je maximum pro 32bitové celé číslo. Chová se k němu tedy jako k plováku a protože plováky nejsou skladovány přesně, tak ho trochu upravuje. To je důvod, proč je vaše uložené číslo téměř stejné, ale liší se o malý kousek (tento rozdíl bude menší než 8). Ale chcete uložit toto číslo přesně a mongo podporovat 64bitové celé číslo (které odpovídá vašemu celému číslu).
Musíte tedy zadat, že jej chcete uložit jako 64bitové celé číslo . Můžete to udělat následujícím způsobem:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
Poté můžete načíst svůj dokument db.a.find()
a bude to správné. Všimněte si, že mnoho ovladačů má podobné problémy, a proto musíte výslovně říci, že je budete ukládat jako 64bitové celé číslo.
Pokud nezadáte _id
pro dokument, který vytváříte, mongodb vytvoří _id
pole samo o sobě. Můžete si přečíst něco málo o _id
zde
a v oficiální dokumentaci
.
Pokud máte vlastní pole, které chcete použít jako _id
, místo psaní id:138548488276343678
měli byste napsat _id : 138548488276343678
.
P.S. také protože vidím, že používáte poměrně velká čísla, mějte na paměti, že celá čísla v mongodb jsou uložena jako 64bitová celá čísla (což znamená, že je mezi -2^63 až 2^63 - 1)