Mongo find()返回[object Object]

时间:2018-01-09 03:36:53

标签: mongodb meteor

在meteor中我创建了一个数据库数组。以下是内容:

meteor:PRIMARY> db.games.find()
{ "_id" : "ceg9JJ3u5abwqeyk7", "board" : [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ] }

在我的模板帮助器中的client / main.js文件中,我有:

Template.hello.helpers({
  counter() {
    return Template.instance().counter.get();
  },
  game() {
    return {
    game: Games.find()}
  }
});

在我的main.html中,我有以下模板:

<template name="hello">
  {{game}}
</template>

我在浏览器上的输出是:

 [object Object]

但是我想让我的数组内容(例如“0”)放在浏览器中而不是“对象”。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您没有正确地迭代查询。

Template.hello.helpers({
  game() {
    return Games.find()
  }
});

main.html中:

<template name="hello">
  {{#each game}}
    Boards: {{board}}
  {{/each}}
</template>

根据您的评论解释:

您收集的find条记录有三种不同的方式。

Collection.findOne():仅返回1条记录作为对象

Collection.find().fetch():将所有记录作为对象数组返回

Collection.find():返回游标(这是一个函数)

请使用您的浏览器控制台,使用以下语句查看其中每个语句之间的差异,以便更好地理解:

console.log(Games.findOne());
console.log(Games.find().fetch());
console.log(Games.find());

所有这些都将返回您的整个board字段数据,因为所有数据都存储为单个记录。

因此,您必须按以下方式之一存储此数据,以便根据您的要求过滤数据。

方法1:

以下列格式存储您的数据作为每个游戏的单独记录:

{
    "_id" : "ceg9JJ3u5abwqeyk7",
    "name": "Game-1",
    "score": [ 0, 0, 0 ]
 },{
    "_id" : "bzv778zv6qge7xc8",
    "name": "Game-3",
    "score": [ 0, 0, 0 ]
 },{
    "_id" : "eji3ds9jo8yhs7739",
    "name": "Game-3",
    "score": [ 0, 0, 0 ]
 },

您现在可以使用以下代码显示数据:

<template name="hello">
  {{#each game}}
       Game Name: {{name}}, Score: {{score}} <br/>
  {{/each}}
</template>

如果您只想显示&#34; Game-3&#34;得分,您可以在使用find获取数据时进行过滤:

<template name="hello">
  {{#each game}}
      Game Name: Game-3, Score: {{score}}
  {{/each}}
</template>

Template.hello.helpers({
  game() {
    return Games.find({name:"Game-3"});
  }
});

方法2:

以下列格式存储您的数据:

{
    "_id" : "ceg9JJ3u5abwqeyk7",
    "board" : [
                  {
                     "name": "Game-1",
                      "score": [ 0, 0, 0 ]
                  },
                  {
                     "name": "Game-2",
                      "score": [ 0, 0, 0 ]
                  },
                  {
                     "name": "Game-3",
                      "score": [ 0, 0, 0 ]
                  },
              ]
 }

您可以使用以下代码显示数据:

<template name="hello">
  {{#each game}}
      Boards: <br/>
      {{#each board}}
         Game Name: {{name}}, Score: {{score}} <br/>
      {{/each}}
  {{/each}}
</template>

如果您只想显示&#34; Game-3&#34;得分,您可以使用助手进行过滤,如下所示:

<template name="hello">
  {{#each game}}
      Boards: <br/>
      {{#each board}}
          {{#if isThirdGame}}
              Game Name: Game-3, Score: {{score}}
          {{/if}}
      {{/each}}
  {{/each}}
</template>

Template.hello.helpers({
  game() {
    return Games.find()
  },
  isThirdGame() {
    return this.name === "Game-3" ? true : false;
  },
});