当前位置: 首页 > 知识库问答 >
问题:

更新查询中的MongoTemplate确定性顺序

何兴安
2023-03-14

我在MongoTemplate的代码(MappingMongoConverter)中找到了这个转换器,对我来说,循环不是确定性的:

private void writeProperties(Bson bson, MongoPersistentEntity<?> entity, PersistentPropertyAccessor<?> accessor,
        DocumentAccessor dbObjectAccessor, @Nullable MongoPersistentProperty idProperty) {

    // Write the properties
    for (MongoPersistentProperty prop : entity) {

        if (prop.equals(idProperty) || !prop.isWritable()) {
            continue;
        }
        if (prop.isAssociation()) {
            writeAssociation(prop.getRequiredAssociation(), accessor, dbObjectAccessor);
            continue;
        }

        Object value = accessor.getProperty(prop);

        if (value == null) {
            continue;
        }

        if (!conversions.isSimpleType(value.getClass())) {
            writePropertyInternal(value, dbObjectAccessor, prop);
        } else {
            writeSimpleInternal(value, bson, prop);
        }
    }
}

共有1个答案

齐建白
2023-03-14

Spring Mongo@field注释允许显式设置每个字段的顺序。

我的一些POJO有1000个字段,在我的情况下,这是一个费力的解决方案,但确实是一个解决方案。如果有人知道一个更容易的方法,我会很感激:)

来源:https://docs.spring.io/spring-data/mongoDB/docs/current/api/org/springframework/data/mongoDB/core/mapping/field.html

 类似资料:
  • 我正在尝试从MongoDB中的嵌入字段数组中移除一个项。数组是类似下面的字符串类型。

  • 我正在查询具有嵌套对象的集合。域模型如下所示: 我正在使用如下所示的条件进行查询: 同时,我还在研究如何解决这个问题,因为我不能改变文档结构...

  • OTA更新查询与下载 获取access_token 终端设备 终端设备直接接入OTA服务器应当使用Client Credentials模式,client_id为设备id,client_serect为设备令牌. App接入 如果终端设备无法直接接入OTA服务器,而通过App中转,那么App应当也使用Client Credentials模式,client_id为app_id,client_secret

  • 假设我有一个mongo集合,如下所示: 我想使用Spring的mongoTemplate编写一个查询,只检索那些id.index=index1的文档。 使用mongo shell,我可以编写以下查询: 然而,我认为使用mongoTemplate会起作用的东西却不起作用。我尝试过: 有人可以帮助我使用mongoTemplate为这个查询提供正确的语法吗?

  • 问题内容: 首先让我们忘记hibernate。假设我有两个表A和B。两个事务正在更新这两个表中的相同记录,但是txn 1更新B然后A,而txn 2更新A然后B。这是一个典型的死锁示例。避免这种情况的最常见方法是预先定义获取资源的顺序。例如,我们应该先更新表A然后再更新表B。 回到hibernate状态。当我们在一个会话中更新大量实体时,一旦刷新会话,对不同实体的更改将为数据库生成相应的插入/更新/

  • 问题内容: 假设我有一个查询“ select * from子句,其中id在(0,2,5,1,3)中”,我实际上希望返回的行以它们在where子句中指定的相同顺序返回。ID的顺序将随查询的不同而改变,并且该顺序没有模式。 我知道可以更改数据模型,创建临时表等。但是请相信我,这些类型的解决方案在我的情况下将行不通。我也无法在应用程序代码中更改结果对象的顺序。 我还知道,不同的数据库引擎对事物的排序方式