我想通过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)