我使用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"
答案 0 :(得分:0)
您需要提供一些有关您的要求的详细信息,以便我能够正确回答您的问题。
UInt64不是标准的MongoDB类型,但Int64和Int32是。 MongoKitten将尝试将可编码API中的UInt64转换为数字长(Int64)。在非可编码的API中,您非常明确地需要将UInt64转换为BSON支持的原始类型,您自己
您可以在查询中使用普通Int
。由于(几乎)所有运行Swift的设备/服务器都是64位,因此MongoKitten不支持32位(虽然它可能有效)。这意味着Int
与Int64
相同。如果您将MongoDb中的日期存储为日期而不是纪元整数,那么您也可以在MongoKitten中使用Foundation.Date
,包括查询。
let epoch = date.timeIntervalSince1970 * 1000.0)
let results = try collection.find("super.upd_dtm" >= epoch)