0

我想通过 Vapor 和 MongoKitten 更新 MongoDB 中的自动增量字段。不一定是唯一键。

目标是使用 $inc 修饰符使其成为单个原子操作并一次性获得返回的递增结果。

MongoKitten 是否支持此操作?

我可以通过使用findAndUpdate方法来实现这一点吗?

如果是,这将是什么示例语法?

4

1 回答 1

0

使用 MongoKitten,您可以使用findAndUpdateCollection 上的功能来执行此操作。输入应该是一个查询(除非您想增加集合中的所有实体)和with更新文档的参数。

// The query used to find the document to increment
let query: Query = "_id" == ...

在更新文档中,您可以像这样使用$inc 运算符

let updateDoc: Document = ["$inc": ["myKey": 1]]

这将通过增加 1 来更新“myKey”

let updated = try collection.findAndUpdate(query, with: updateDoc)

updated文档将包含更新的文档,因此 ifmyKey的值为 3。在此查询后它将递增到 4,但您将收到值为 的文档3

要更改这一点,您可以更改returnedDocument参数(默认为.old

let updated = try collection.findAndUpdate(query, with: updateDoc, returnedDocument: .new)

最后,如果您关心优化或只是发现通常限制了返回的结果,您应该考虑添加投影。投影向数据库指示您对哪些字段感兴趣和不感兴趣。

您可以将其与 一起使用findAndUpdate以确保仅返回相关字段,即myKey本示例中的整数值。

let updated = try collection.findAndUpdate(query, with: updateDoc, returnedDocument: .new)
于 2017-12-29T10:38:00.830 回答