gpt4 book ai didi

java - Mongodb文档格式一致性

转载 作者:行者123 更新时间:2023-12-01 09:35:41 25 4
gpt4 key购买 nike

我对 Mongodb 比较陌生,我心里有一个想法,但不知道如何去做。

我想做的本质上是对 mongodb 文档进行哈希处理(最好是 Json 格式,因此它不是特定于数据库的),并将该哈希值存储在某个位置并引用该特定文档。这需要允许我将来通过查询检索文档并与存储的哈希进行比较。

我的想法是获取 DBObject 的 json 表示形式,对其进行散列,然后将散列作为字段添加到该特定文档中,然后再持久化它。然后,在查询对象时,请确保从答案中排除哈希字段,以便返回的 DBObject 包含相同的哈希。

1 - mongodb 是否始终返回一致的 DBObject 格式,该格式始终会转换为相同的 json,以便哈希值始终相同

2 - 这样的实现是否可行?与将哈希值与对象本身一起存储一样,本质上是更改对象(从而使哈希值无效),但通过不在响应中检索该字段来绕过

3 - 如果实现不起作用,存储散列的最简单方法是什么,即另一个引用原始文档的对象?

最佳答案

1- mongodb 是否始终返回一致的 DBObject 格式,该格式始终会转换为相同的 json,以便哈希值始终相同。 - No Mongo 不保证顺序,因此 json 可能会根据文档上进行的更新类型而有所不同。 There is no guarantee that the field order will be consistent, or the same, after an update 。如果没有进行此类顺序更改更新,则应保留顺序 MongoDB update on Field Order 。但是,当您使用 Jackson 或其他东西将 json 序列化为对象时,它将序列化为相同的对象并且应该具有相同的哈希值。

2 - 这样的实现是否可行?与将哈希值与对象本身一起存储一样,本质上是更改对象(从而使哈希值无效),但通过不在响应中检索该字段来解决这一问题。从这个看起来像answer您可以使用 Jakson 或 Gson 来哈希 json 对象,即使它没有排序。 excluding a field应该不是问题。如果将哈希存储为对象本身中的字段,则所有保存的写入查询(这是整个文档的覆盖)都必须将哈希写入其中。如果其中任何一个失败,哈希值就会丢失。更新查询还会遇到另一个问题,因为除了更改数据之外,它还必须更新文档的哈希值。因此,这必须涉及读取对象、修改它、计算哈希值并将其存储回来。您将无法使用原始更新查询。

如果您将哈希作为主键(即 _id 字段),则可以缓解此问题,尽管您可能需要它用于其他用途。

3- 最简单的方法是将要散列的文档的 _id 存储到另一个集合中,并将散列作为新集合的 _id。

{
"_id":<hash code of docuemnt>,
"refer":<_id of the document to be hashed>
}

这将涉及多次读写,这会损害性能,具体取决于您的用例

据我所知,Mongo 是一个简单的数据库,旨在存储和检索对象。如果您需要用它做一些复杂的事情,而不是快速检索和编写它,它可能不适合该任务。

关于java - Mongodb文档格式一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38964527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com