MongoDB Panache return 写入操作无效
MongoDB Panache return void for write operations
在 'plain vanilla' MongoDB 中,对数据库执行写入操作的方法,例如 .insertOne() 或 .deleteOne(),将 return 一个 InsertOneResult
或 DeleteResult
分别。这些对象将 return 为 acknowledged
的布尔值和适用的 id
。这使我们能够确保写入操作成功。
但是,在 Panache 中,MongoOperations.class
是 returning void:
MongoOperations.class
private static void persist(MongoCollection collection, Object entity) {
collection.insertOne(entity);
}
接下来的问题是,我们如何检索生成的 InsertResult
和 DeleteObject
对象?
正在使用 pom 依赖项
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-mongodb-panache</artifactId>
<version>1.5.0.Final</version>
这是一个设计选择。
我们选择使 MongoDB with Panache 尽可能接近 Hibernate with Panache,因此 persist()
和 delete()
returns 无效。
我们不想公开 MongoDB 相关的 API(所以不返回 InsertOneResult
或 DeleteResult
)。
因此,您的问题是关于访问 acknowledged
布尔值以确保操作已在 MongoDB 端得到确认,以及 id
以防您创建新文档和让 MongoDB 为您管理标识符。
这里有一些答案:
id
是在插入数据库之前计算的,您可以在调用 persist()
操作后从实体中检索它,它会由 MongoDB 驱动程序填充.
- MongoDB 的默认写入问题是
w:1
,这意味着如果主(或独立)节点已确认操作,则操作将成功。这意味着默认情况下,如果对 persist()
的调用没有抛出异常,则该操作已被确认。除非您将 MongoDB 配置为 w:0
的写入关注,否则一旦 persist()
操作成功,这意味着文档已被插入到数据库中。
- 对于
delete()
操作,同样的写关注规则适用。但是我们没有检查文档是否已经被删除(我们没有检查 deletedCount 是否为 1),也许这是一个疏忽,我们可能已经完成了。如果您认为我们应该这样做,您可以在 Quarkus Github 存储库中提出一个问题(这可能会破坏向后兼容性,因此我们需要对此小心)。
在 'plain vanilla' MongoDB 中,对数据库执行写入操作的方法,例如 .insertOne() 或 .deleteOne(),将 return 一个 InsertOneResult
或 DeleteResult
分别。这些对象将 return 为 acknowledged
的布尔值和适用的 id
。这使我们能够确保写入操作成功。
但是,在 Panache 中,MongoOperations.class
是 returning void:
MongoOperations.class
private static void persist(MongoCollection collection, Object entity) {
collection.insertOne(entity);
}
接下来的问题是,我们如何检索生成的 InsertResult
和 DeleteObject
对象?
正在使用 pom 依赖项
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-mongodb-panache</artifactId>
<version>1.5.0.Final</version>
这是一个设计选择。
我们选择使 MongoDB with Panache 尽可能接近 Hibernate with Panache,因此 persist()
和 delete()
returns 无效。
我们不想公开 MongoDB 相关的 API(所以不返回 InsertOneResult
或 DeleteResult
)。
因此,您的问题是关于访问 acknowledged
布尔值以确保操作已在 MongoDB 端得到确认,以及 id
以防您创建新文档和让 MongoDB 为您管理标识符。
这里有一些答案:
id
是在插入数据库之前计算的,您可以在调用persist()
操作后从实体中检索它,它会由 MongoDB 驱动程序填充.- MongoDB 的默认写入问题是
w:1
,这意味着如果主(或独立)节点已确认操作,则操作将成功。这意味着默认情况下,如果对persist()
的调用没有抛出异常,则该操作已被确认。除非您将 MongoDB 配置为w:0
的写入关注,否则一旦persist()
操作成功,这意味着文档已被插入到数据库中。 - 对于
delete()
操作,同样的写关注规则适用。但是我们没有检查文档是否已经被删除(我们没有检查 deletedCount 是否为 1),也许这是一个疏忽,我们可能已经完成了。如果您认为我们应该这样做,您可以在 Quarkus Github 存储库中提出一个问题(这可能会破坏向后兼容性,因此我们需要对此小心)。