Wie speichern unsigned long long (uint64_t) Werte in einer MongoDB-Dokument?
Ich soll zum speichern von zahlen des Typs unsigned long long (uint64_t) in einer MongoDB-Dokument, wie mache ich es?
Muss ich verwenden, unsigned long long, denn ich bin mit Twitter-API, die verwendet unsigned 64-bit-Ganzzahlen https://dev.twitter.com/docs/twitter-ids-json-and-snowflake
Bereich der nicht signierten 64-bit-integral-Typ muss zum represended von 8 Byte und einen Datenbereich von 0 bis 18,446,744,073,709,551,615.
Ich bin mit dem C++ MongoDB-Treiber und die append-member-Funktion der BSONArrayBuilder Klasse nicht eine überlastung für unsigned long long, nur für lange.
Hier der Fehler G++ 4.7.2 ausspuckt wenn ich versuche zu nennen, arrayBuilder.append(id), mit einer id vom Typ uint64_t:
MongoDB/mongo/db/../bson/bson-inl.h:342:9: error: call of overloaded ‘append(const char*&, long long unsigned int&)’ is ambiguous
MongoDB/mongo/db/../bson/bsonobjbuilder.h:167:25: note: mongo::BSONObjBuilder& mongo::BSONObjBuilder::append(const mongo::StringData&, bool)
MongoDB/mongo/db/../bson/bsonobjbuilder.h:175:25: note: virtual mongo::BSONObjBuilder& mongo::BSONObjBuilder::append(const mongo::StringData&, int)
MongoDB/mongo/db/../bson/bsonobjbuilder.h:183:25: note: mongo::BSONObjBuilder& mongo::BSONObjBuilder::append(const mongo::StringData&, unsigned int)
MongoDB/mongo/db/../bson/bsonobjbuilder.h:188:25: note: virtual mongo::BSONObjBuilder& mongo::BSONObjBuilder::append(const mongo::StringData&, long long int)
MongoDB/mongo/db/../bson/bsonobjbuilder.h:244:25: note: virtual mongo::BSONObjBuilder& mongo::BSONObjBuilder::append(const mongo::StringData&, double)
MongoDB/mongo/db/../bson/bsonobjbuilder.h:324:25: note: mongo::BSONObjBuilder& mongo::BSONObjBuilder::append(const mongo::StringData&, mongo::Date_t)
- Ich weiß, dass die BSON-Spezifikation hat int64 definiert als 8-Byte (64-bit Ganzzahl).
- Ich NICHT wollen, um einen string für die ID.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bei allem Respekt, IMHO das beste, was Sie tun können, ist zu überdenken Sie Ihre Entscheidung nicht Zeichenfolge verwenden, für die ID-da:
wahrscheinlich ist es viel effizienter ist, als du jemals, obwohl aufgrund der Menge der overhead von bson-Interna beim speichern 64B verdoppeln die in der Regel 3 zusätzliche Felder und Feldnamen (siehe 'floatApprox','oben', unten' hier , hier und hier)
es ist bereits vorgesehen, wie id_str durch die twitter-API, die Sie verwenden aus gutem Grund
sind Sie gehen zu müssen echt Mühe casting jene zahlen, die in JS, wenn
Sie jemals geschehen zu verwenden mongodb Karte reduzieren
Da MongoDB/BSON unterstützt nur den signierten 64-bit-Ganzzahlen, Sie müssen werfen Sie Ihre 64-bit-Werte ohne Vorzeichen/von
long long
bei der Interaktion mit der Datenbank.Alle 64-bit sind immer noch verwendet, so dass Sie nicht verlieren jede der verfügbaren unsigned Reichweite ist, wird es nur zeigen, wie ein negativer Wert in der Datenbank für diese Werte, die am meisten bedeutende bit.
uint64_t
beim Lesen wieder aus, funktioniert es.