簡體   English   中英

如何從mongodb查詢存儲為UInt64的值?

[英]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”

您需要提供有關您要求的更多詳細信息,以便我正確回答您的問題。

  • 您正在使用哪個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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM