我想通过Vapor和MongoKitten更新MongoDB中的自动增量字段。不一定是唯一的密钥。
目标是使用$ inc修饰符以使其成为单个原子操作并一次性获得返回的递增结果。
MongoKitten是否支持此操作?
我可以实现这个目标,例如使用 findAndUpdate 方法?
如果是,那将是什么示例语法?
答案 0 :(得分: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来更新“myKey”
let updated = try collection.findAndUpdate(query, with: updateDoc)
updated
文档将在更新之前包含文档,因此如果myKey
的值为3.在此查询后,它将增加到4,但是我将收到值为3
的文档。
要更改此设置,您可以更改returnedDocument
参数(默认为.old
)
let updated = try collection.findAndUpdate(query, with: updateDoc, returnedDocument: .new)
最后,如果您关心优化或只是发现限制返回的结果,您应该考虑添加投影。 Projections向数据库指示您对哪些字段感兴趣。
您可以将其与findAndUpdate
一起使用,以确保仅返回相关字段,在此示例中为myKey
整数值。
let updated = try collection.findAndUpdate(query, with: updateDoc, returnedDocument: .new)