java - 在单个查询中按 ObjectId 按顺序加载多个对象的最佳方法?

标签 java mongodb morphia

我有一个想要从 MongoDB 加载的一些对象的 ObjectID 列表。目前我循环遍历每个并使用 Java 驱动程序进行 get,但这非常低效。

我尝试了 Morphia Datastore.get(java.lang.Class<T> tClass, java.lang.Iterable<V> vs)方法并向其传递一个 ID 列表。不幸的是,订单没有保留,我猜是因为它使用 $in: {...}语法。

有没有办法执行单个查询并以任意顺序获取对象?

更新:需要明确的是,我有一个有序的 ID 列表,并且希望以相同的顺序加载相应的对象。

最佳答案

据我所知,没有这样的选项,我们甚至不需要这样的选项。

我最近使用 Mongo 所做的是创建一个 findByIds(Iterable<ObjectId> ids)这将主要做 Morphia 似乎做的事情,除了它将返回结果作为 Map<ObjectId,Model> (或Map<String,Model>)

有不同的可能策略来处理无法找到的 id:

  • 不要把 key 放在 map 上(我选择的)
  • 将键设置为空值
  • 提出异常(exception)

我迭代了 Iterable,以便我确信它保留了迭代顺序(使用 LinkedHashMap )

你也可以做类似的事情。您拥有按迭代顺序对 MongoDB 结果进行排序所需的一切。一切都已经在内存中了,不需要花费太多......

关于java - 在单个查询中按 ObjectId 按顺序加载多个对象的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17755824/

相关文章:

mongodb - 使用 MongoDB 时玩框架测试和访问 session 对象

Java 数组创建和数组名称更改

java - Android putExtra 推送数据使用相同的按键从不同的按钮

java - redis 批量增量更新

java - 终端不覆盖 .class 文件

java - 从 mongodb 访问数据

java - 如何在 MongoDB 的 application.properties 中设置等待队列倍数和最大池大小

MongoDB - 无需应用程序的手动引用

java - 适用于 Flex、Java、mongoDb 的云?

java - 何时使用 MongoDB Driver/Morphia 而不是 Hibernate