c++ - 如何在 MongoDB 文档中存储 unsigned long long (uint64_t) 值?

标签 c++ mongodb twitter mongodb-query

我想在 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 driverBSONArrayBuilder 的 append 成员函数类没有 unsigned long long 的重载,只有 long long。

当我尝试使用 uint64_t 类型的 id 调用 arrayBuilder.append(id) 时,出现 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 specification将 int64 定义为 8 个字节(64 位 有符号整数)。
  • 我不想使用字符串作为 ID。

最佳答案

由于 MongoDB/BSON 仅支持带符号的 64 位整数,因此在与数据库交互时,您需要将 64 位无符号值转换为 long long

仍然使用所有 64 位,因此您不会丢失任何可用的无符号范围,对于那些使用最高有效位的值,它只会在数据库中显示为负值。

关于c++ - 如何在 MongoDB 文档中存储 unsigned long long (uint64_t) 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13994498/

相关文章:

c++ - 为什么调用这个方法而不是另一个?

c++ - 有两个线程的运行时间与一个线程的运行时间没有改善

javascript - 获取ID数组中所有具有匹配ID的元素

ios - API 1.1 版的 Twitter 授权

c++ - 从枚举定义中删除依赖常量

c++ - 在C++非类型模板参数中使用decltype(auto)

javascript - "user validation failed: passsword: Path ` 密码 ` is required."

javascript - MongoDB 聚合 () - 错误 "TypeError: Cannot call method ' forEach' of undefined"

random - 随机选择一组推特用户的好方法是什么?

python - 使用 NLTK for Python 训练用于情感分析的推文语料库