14

我是 Meteor 的新手,尤其是 MongoDB。

关于这个问题,我在谷歌上搜索了很多,但没有发现与此相关的内容。

所以有一个包含两个集合的应用程序:EventsCollectionRacesCollection运行在 Meteor 服务器上。

RacesCollection许多记录,例如:

RacesCollection.insert({raceId:"r1", eventId:"e1", raceName:"Moto race 1", status:"statusDetail", mode:"modeDetail"});
RacesCollection.insert({raceId:"r2", eventId:"e1", raceName:"Moto race 2", status:"statusDetail", mode:"modeDetail"});

这是包含行的结果集合eventId = e1

var race = RacesCollection.find({eventId: "e1"});

现在我想做的是简单地访问racejavascript 中的字段,例如race.raceId, race.raceName。如何实施?是否有任何获取特定数据字段的 getter 方法?

以及如何遍历多行race以防它包含行数?

任何建议都会被采纳。

4

4 回答 4

31

使用 ForEach :

db.databaseName.find(
  {
    field:"valueofField"
  }
).forEach(function(obj){
    print(obj.fieldname)
})
于 2014-06-04T11:33:03.913 回答
10

MongoDB 的find()方法返回所谓的“光标”。在 javascript 中,您可以像在这些文档中一样遍历光标,并使用标准 javascript 属性访问来访问文档的字段。

例如(未经测试的代码,但这是想法):

var raceCursor = RacesCollection.find({eventId: "e1"});
var race;
while ( raceCursor.hasNext() ) {
    race = raceCursor.next();
    console.log( race.raceName );
}

由于 Meteor 是纯 javascript,它还支持使用forEach()来遍历光标的文档,如本例所示

于 2012-10-18T14:25:58.163 回答
4

我只是遇到了同样的问题,而 hasNext() 对我不起作用。

相反,Meteor 提供了fetch()来将游标转换为 javascript 数组。所以你可以使用:

var raceCursor = RacesCollection.find({eventId: "e1"});
var races = raceCursor.fetch();
for (var i=0; i<races.length; i++) {
    console.log( races[i].raceName );
}
于 2013-08-16T23:25:06.253 回答
4

Sekai 的答案有效,但是,它是从 MongoDB 的角度编写的。从 Meteor JavaScript 助手,使用问题中使用的变量,它看起来像:

RacesCollection.find(
   {eventId: "e1"}
).forEach(function(race){
   console.log( race.raceName );
};
于 2016-04-02T15:31:02.770 回答