14

私はMeteor、特にMongoDBを初めて使用します。

私はこの問題に関してたくさんグーグルで検索しましたが、これに関連するものは何も見つかりませんでした。

したがって、2つのコレクションを含むアプリがあります。EventsCollectionRacesCollectionMeteorサーバーで実行されます。

には、次の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"});

今私がやりたいのは、JavaScriptのフィールドにアクセスすることraceです。これを実装する方法は?特定のデータフィールドにアクセスするためのゲッターメソッドはありますか?race.raceIdrace.raceName

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 に答える