我想在MongoDB文档中存储 unsigned long long(uint64_t)类型的数字,我该怎么办?
我需要使用unsigned long long,因为我使用的是使用无符号64位整数的Twitter API https://dev.twitter.com/docs/twitter-ids-json-and-snowflake
无符号64位整数类型的范围需要用8个字节表示,数据范围为0到18,446,744,073,709,551,615。
我正在使用C++ MongoDB driver并且BSONArrayBuilder类的追加成员函数没有超符号用于无符号long long,只有很长时间。
当我尝试调用arrayBuilder.append(id)时,错误G ++ 4.7.2吐出,id为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)
答案 0 :(得分:10)
由于MongoDB / BSON仅支持带符号的64位整数,因此在与数据库交互时,需要将64位无符号值转换为long long
。
仍然使用所有64位,因此您不会丢失任何可用的无符号范围,它只会在数据库中显示为使用最高位的值的负值。
答案 1 :(得分:2)