我有一个想要从 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/