[英]Will MongoDB Go Driver automatically convert ‘uint64’ to bson type? Overflows error returned
[英]How to query a value stored as UInt64 from mongodb?
我將mongokitten用作osx應用程序和mongodb之間的接口。我將日期作為UInt64存儲到數據庫中。在Db中,它以這種格式存儲-NumberLong(“ 1514450415154”)。從數據庫插入和讀取數據時沒有問題,因為在這兩種情況下,值都只是1514450415154。但是在嘗試查詢時,僅該值是不夠的。因此,我無法編寫查詢。有人可以幫我找到可能的解決方案嗎?
我正在使用mongokitten主要版本:4,快速版本:3,xcode9。是的,我正在使用Codable來利用Encodable和Decodable協議。
樣例代碼:
let dateUint:UInt64 = UInt64(date.timeIntervalSince1970 * 1000.0); let query:查詢=查詢(aqt:.greaterThanOrEqual(鍵:“ super.upd_dtm”,val:dateUint為!原始))
存儲在db中的結構:
“ _id”:“ 093FF386-1D53-4DFC-AC56-D2B778C7D6FE”,“ super”:{“ rel_ver”:“”,“ crt_in”:“ macpro”,“ crt_by”:“ ABC”,“ lst_syn”:NumberLong( “ 1514875651306”),“ is_drty”:false,“ crt_dtm”:NumberLong(“ 1514875651306”),“ upd_dtm”:NumberLong(“ 1514875651306”),“ doc_ver”:NumberLong(0)},“ prj_nme”:“ project1” ,“ prj_id”:“ 4545C803-D41E-4A4F-9409-538FC183D8B3”
您需要提供有關您要求的更多詳細信息,以便我正確回答您的問題。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.