【问题标题】:How to use Morphia to findAndModify with a sorted search query?如何使用 Morphia 通过排序的搜索查询 findAndModify?
【发布时间】:2021-12-11 16:20:57
【问题描述】:

我使用的是 Morphia 1.6.1,这是我的实际代码:

final Query<Entity> query = datastore.createQuery(Entity.class)
    .field("status").equal(Status.OPEN)
    .order(Sort.ascending("lastUsed"));

final UpdateOperations<Entity> updateOperations = datastore
    .createUpdateOperations(Entity.class)
    .set("lastUsed", ZonedDateTime.now());

final Entity entity = datastore.findAndModify(query, updateOperations);

唯一的问题是 .order() 是@Deprecated。所以我需要找到另一种方法来做到这一点。你有什么想法吗?

【问题讨论】:

    标签: java mongodb sorting deprecated morphia


    【解决方案1】:

    如果您使用的是 1.6.1,则可以愉快地使用该方法。迁移到 2.x 后,修改操作的完成方式以及选项的传递方式都会发生一些变化,因此无论如何您都需要进行一些返工。 (有一个选项可以继续使用已完全弃用且很快将被删除的旧版 API。可能在 2.4 中。)

    2.x 对该 API 进行了彻底的重新思考,旨在成为一组更合理、更可用的接口。到目前为止,人们似乎对此很满意。我强烈建议升级。

    【讨论】:

    • 谢谢。我目前正在尝试让它与 2.2.1 一起运行,但我仍然遇到问题。你会用聚合来做吗?像这里``` final Aggregation aggregation = datastore.aggregate(Entity.class) .match(Filters.eq("status", Status.OPEN)) .set(AddFields.addFields().field("setLastUsed" , new Expression("$set lastUsed", ZonedDateTime.now()) )) .sort(Sort.sort().ascending("lastUsed")); ``` 这仍然给了我一个 dev.morphia.query.internal.MorphiaCursor 类型的对象,如果我调用 .execute()
    • 看看Query上的modify()方法。
    • 此外,根据您的应用程序和数据的位置,您可能需要探索Mapper 上的legacy() 配置。它将保留 2.0 之前的行为,例如查询和实体映射。但是,如果新的/现代选项有效,请务必使用这些选项。
    • 我的团队刚刚同意使用 1.6.1 版本的已弃用订购方法。所以我们使用的是我原来帖子的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多