我想在MongoDB文档中存储类型为unsigned long long (uint64_t)的数字,我该怎么做?
我需要使用unsigned long long,因为我正在使用Twitter API,它使用无符号64位整数https://dev.twitter.com/docs/twitter-ids-json-and-snowflake
无符号64位整数的范围需要用8个字节表示,并具有0到18,446,744,073,709,551,615的数据范围。
我正在使用C++ MongoDB驱动程序,并且BSONArrayBuilder类的append成员函数没有unsigned long long的重载,只有long long。
当我尝试调用arrayBuilder.append(id)时(其中id的类型为uint64_t),这里是G++ 4.7.2报告的错误:
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)
- 我知道BSON规范中将int64定义为8字节(64位有符号整数)。
- 我不想使用字符串作为ID。
uint64_t
,它们就能正常工作。注意不要改变原意。 - JohnnyHK