0

我使用 mongokitten 作为我的 osx 应用程序和 mongodb 之间的接口。我将日期作为 UInt64 存储到 db 中。在 Db 中它以这种格式存储 - NumberLong("1514450415154")。从 db 插入和读取数据时没有问题在这两种情况下,值都只是 1514450415154。但是在尝试查询时,只是该值是不够的。因此我无法编写查询。有人可以帮我找到可能的解决方案吗?

我正在使用 mongokitten 主要版本:4,swift 版本:3,xcode 9。是的,我正在使用 Codable 来使用 Encodable 和 Decodable 协议。

示例代码:

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

存储在数据库中的结构:

“_id”:“093FF386-1D53-4DFC-AC56-D2B778C7D6FE”,“超级”:{“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”

4

1 回答 1

0

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

  • 您使用的是哪个 MongoKitten 版本?
  • 您使用的是哪个 Swift 版本?
  • 你用的是可编码的吗?
  • 你能发布一些重现问题的代码吗?

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


您可以在查询中使用法线Int。由于(几乎)所有运行 Swift 的设备/服务器都是 64 位的,MongoKitten 不支持 32 位(尽管它可能工作)。这意味着 anInt与 相同Int64。如果您将日期存储在 MongoDb 中作为日期而不是纪元整数,您也可以Foundation.Date在 MongoKitten 中使用,包括查询。

let epoch = date.timeIntervalSince1970 * 1000.0)
let results = try collection.find("super.upd_dtm" >= epoch)
于 2018-01-01T20:57:30.400 回答