【问题标题】:Iterate over Mongo DBCursor in Play Framework Template在 Play 框架模板中迭代 Mongo DBCursor
【发布时间】:2012-06-17 14:36:49
【问题描述】:

我正在尝试在 play framework 2.0.1 视图中迭代 mongo DBCursor。但是,没有列出任何内容。理想情况下,我想对光标进行分页,但即使我能够列出光标中的所有对象也可以。

这就是我正在做的事情。 在我的控制器中,我查询 Mongo DB 并渲染 DBCursor。日志表明光标不为空。

然后在视图中我有以下内容:

@(cursor: com.mongodb.DBCursor)


@main("Title") {
<div id="objects" class="content">
 <h2>Objects</h2>

 @if(cursor.count() == 0) {
    There are currently no objects in the data base.
 } else {
    @while(cursor.hasNext()) {
        @cursor.next().get("name");
    }
 } 
</div>    
}

不幸的是,除了呈现页面时的标题之外,没有列出任何内容。 有趣的是,如果我省略了@while(cursor.hasNext()) 并且只输出光标的第一个对象,那么它就会呈现在页面上。

显然那段时间出了点问题。那么,是否可以在视图中渲染(和/或分页) DBCursor?

谢谢!

【问题讨论】:

  • 我不知道为什么 @while() 不起作用。也许它根本不存在于 scala 模板中?但我可以告诉你,这种工作不打算在视图中完成。视图用于渲染,而控制器用于逻辑和访问数据库。考虑将 DBObjects 解析为控制器中的列表或数组,并在视图中使用 @for 对其进行迭代。
  • 哦,太尴尬了。我以为有一段时间。所以你说的是,我应该从控制器中的光标中获取对象,然后将它们以列表的形式传递给视图。是否有可能以某种方式对它们进行分页?他们可能很多。而且真的没有必要一次全部取走。感谢您的回复。
  • 您可以使用limit() 和skip() 方法进行分页。示例:myCollection.find(query).skip(40).limit(20);
  • 谢谢,应该可以。如果您将其写为答案,我会接受。由于糟糕的设计(在视图中访问 mongo)我没有想到。

标签: scala mongodb playframework playframework-2.0


【解决方案1】:

也许 @while 在 scala 模板中不存在!?

这种工作不打算在视图中完成。视图用于渲染,而控制器用于逻辑和访问数据库。考虑将 DBObjects 解析为控制器中的列表或数组,并在视图中使用 @for 对其进行迭代。

对于分页使用这样的东西:

myCollection.find(query).skip(40).limit(20);

【讨论】:

  • 我也在寻找如何做到这一点。将光标转换为列表然后遍历列表效率非常低,甚至考虑这样做几乎是疯狂的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多