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

MongoDB Number Field se nevloží ani neaktualizuje s číslem, které zadávám

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)




  1. Mongoose Compound Index Unikátní + řídký

  2. Stejný úkol byl proveden několikrát

  3. Jak napíšu tento dotaz SQL v syntaxi Mongodb?

  4. Jak vrátit výsledky Mongoose z metody hledání?