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

时间:2017-12-28 10:51:56

标签: mongodb swift3 mongokitten

我使用mongokitten作为我的osx app和mongodb之间的接口。我将日期作为UInt64存储到db.In Db中以这种格式存储 - NumberLong(" 1514450415154")。没有问题从数据库插入和读取数据时,因为在这两种情况下,值都只是1514450415154.但是在尝试查询时,只是值不够。因为我无法编写查询。任何人都可以帮我找到一个可能的溶液

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

示例代码:

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

存储在db:

中的结构

" _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"

1 个答案:

答案 0 :(得分:0)

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

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

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

您可以在查询中使用普通Int。由于(几乎)所有运行Swift的设备/服务器都是64位,因此MongoKitten不支持32位(虽然它可能有效)。这意味着IntInt64相同。如果您将MongoDb中的日期存储为日期而不是纪元整数,那么您也可以在MongoKitten中使用Foundation.Date,包括查询。

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