如何从 mongodb 查询存储为 UInt64 的值?

How to query a value stored as UInt64 from mongodb?

我正在使用 mongokitten 作为我的 osx 应用程序和 mongodb.I 将日期作为 UInt64 存储到 db.In Db 中的接口,它以这种格式存储 - NumberLong("1514450415154") .从数据库中插入和读取数据时没有问题,因为在这两种情况下,尝试查询时值只是 1514450415154.But,只是值不是 sufficient.Hence 我无法编写 query.Can 谁能帮我找到可能的解决方案?

我正在使用 mongokitten major version:4, swift version:3,xcode 9.Yes 我正在使用 Codable 以利用 Encodable 和 Decodable 协议.

示例代码:

让 dateUint : UInt64 = UInt64(date.timeIntervalSince1970 * 1000.0); 让查询:Query = Query(aqt: .greaterThanOrEqual(key: "super.upd_dtm", val: dateUint as!Primitive))

数据库中存储的结构:

“_id”:“093FF386-1D53-4DFC-AC56-D2B778C7D6FE”, "super":{ "rel_ver":“”, "crt_in" : "macpro", "crt_by" : "ABC", "lst_syn" : NumberLong("1514875651306"), "is_drty":错误, "crt_dtm" : NumberLong("1514875651306"), "upd_dtm" : NumberLong("1514875651306"), "doc_ver" : NumberLong(0) }, "prj_nme" : "project1", "prj_id":“4545C803-D41E-4A4F-9409-538FC183D8B3”

您需要提供更多关于您的要求的详细信息,以便我能够正确回答您的问题。

  • 您使用的是哪个 MongoKitten 版本?
  • 您使用的是哪个 Swift 版本?
  • 你在使用 codable 吗?
  • 你能post一些重现问题的代码吗?

UInt64 不是标准的 MongoDB 类型,但 Int64 和 Int32 是。 MongoKitten 将尝试在可编码 API 中将 UInt64 转换为 numberlong (Int64)。在不可编码的 API 中,您非常明确地需要将 UInt64 转换为 BSON 支持的原始类型,您自己


您可以在查询中使用正常的 Int。由于(几乎)所有 devices/servers 运行 Swift 都是 64 位的,MongoKitten 不支持 32 位(尽管它可能会工作)。这意味着 IntInt64 相同。如果您将日期存储在 MongoDb 中作为日期而不是纪元整数,您还可以在 MongoKitten 中使用 Foundation.Date,包括用于查询。

let epoch = date.timeIntervalSince1970 * 1000.0)
let results = try collection.find("super.upd_dtm" >= epoch)