在JavaScript中访问MongoDB集合值

时间:2012-10-18 13:58:43

标签: javascript mongodb meteor

我是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"});

现在我要做的是只需访问race的字段到javascript,例如race.raceIdrace.raceName。怎么实现这个?是否有用于访问特定数据字段的getter方法?

如果它包含多行,如何遍历多行race

任何建议都会得到满足。

4 个答案:

答案 0 :(得分:31)

使用ForEach:

db.databaseName.find(
  {
    field:"valueofField"
  }
).forEach(function(obj){
    print(obj.fieldname)
})

答案 1 :(得分:10)

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

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

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

由于Meteor是纯javascript,它还支持使用forEach()迭代光标的文档,如this example中所示。

答案 2 :(得分: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 );
}

答案 3 :(得分:4)

然而,Sekai的回答是有效的,它是从MongoDB的角度编写的。在Meteor JavaScript帮助器中,使用问题中使用的变量,它看起来像:

RacesCollection.find(
   {eventId: "e1"}
).forEach(function(race){
   console.log( race.raceName );
};