2017-11-25 193 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)