2017-11-25 76 views
0

我想通過Vapor和MongoKitten更新MongoDB中的自動增量字段。不一定是唯一的關鍵。

目標是使用$ inc修飾符爲了使它成爲一個單一的原子操作,並一次性得到返回的遞增結果。

MongoKitten支持此操作嗎?

我可以做到這一點嗎?通過使用findAndUpdate方法?

如果是這將是一個示例語法?

回答

0

使用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)