我想通過Vapor和MongoKitten更新MongoDB中的自動增量字段。不一定是唯一的關鍵。
目標是使用$ inc修飾符爲了使它成爲一個單一的原子操作,並一次性得到返回的遞增結果。
MongoKitten支持此操作嗎?
我可以做到這一點嗎?通過使用findAndUpdate方法?
如果是這將是一個示例語法?
我想通過Vapor和MongoKitten更新MongoDB中的自動增量字段。不一定是唯一的關鍵。
目標是使用$ inc修飾符爲了使它成爲一個單一的原子操作,並一次性得到返回的遞增結果。
MongoKitten支持此操作嗎?
我可以做到這一點嗎?通過使用findAndUpdate方法?
如果是這將是一個示例語法?
使用MongoKitten,您可以使用Collection上的findAndUpdate
函數來執行此操作。輸入應該是一個查詢(除非你想增加集合中的所有實體)以及更新文檔的一個參數with
。
// The query used to find the document to increment
let query: Query = "_id" == ...
裏面的更新文件,您可以使用$inc operator像這樣:
let updateDoc: Document = ["$inc": ["myKey": 1]]
這將通過1個
let updated = try collection.findAndUpdate(query, with: updateDoc)
的updated
文件通過遞增更新 「的myKey」 將在更新之前包含文檔,因此如果myKey
的值爲3.它將增加到4後部呃這個查詢,但是您將收到值爲3
的文檔。
要改變這一點,你可以在returnedDocument
參數變化(默認爲.old
)
let updated = try collection.findAndUpdate(query, with: updateDoc, returnedDocument: .new)
最後,如果你關心優化或只找到限制Google返回的結果一般來說,你應該考慮增加一個投影。 Projections指示哪些字段你和不感興趣的。
您可以用findAndUpdate
用它來保證只有相關領域(S)返回,這是在這個例子中,myKey
整數值的數據庫。
let updated = try collection.findAndUpdate(query, with: updateDoc, returnedDocument: .new)