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

MongoTemplate deterministic order in update query

我在 Spring 批处理编写器中使用 MongoTemplate,我想使用 $addToSet 运算符将我的元素推送到数组中,前提是它们尚不存在。 我在 Mongodb 文档中看到 $addToSet 只有在字段顺序相同时才有效

所以我的问题是:MongoTemplate 是否总是以相同的顺序将我的 pojo 转换为 Bson 文档?

我在 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);
        }
    }
}

Spring Mongo @Field 批注允许明确设置每个字段的顺序。

我的一些 POJO 有 1000 个字段,在我的情况下这是一个费力的解决方案,但它是一个解决方案。 如果有人知道更简单的方法,我将不胜感激:)

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