Play框架中的Morphia和MongodDB模块都是围绕MongoDB的Java驱动程序的包装。
但我注意到Morphia在查询时没有直接提供Java List。它给了我一个名为Query的复杂对象。在这个对象上,我必须调用方法asList(),这会导致它迭代Query中的每个元素并生成一个List。我认为这在大多数时间需要Java列表时会对性能产生影响。我想知道为什么Morphia在从mongodb数据库中获取数据时不生成List。
答案 0 :(得分:3)
原因是它可以让您决定数据的方式。如wiki所示,您只能通过get()检索第一个对象,或通过asKeyList()检索id列表。 他们承认,使用List()对于大型集合来说代价很高。
根据我的理解,背后的原因是重用Query对象。它们允许您构建复杂的Query对象(带有过滤器等)并在需要时检索结果。您甚至可以从同一个Query中检索不同的结果集,因为列出的方法(asList等)不会影响查询对象。
如果您将重复使用查询对象,并且不会返回大量数据(无论如何都不应该这样做太快乐),这可能很有用。