Доступ к значениям коллекции MongoDB в JavaScript - программирование
Подтвердить что ты не робот

Доступ к значениям коллекции MongoDB в JavaScript

Я новичок в Meteor, и особенно в MongoDB.

Я много разбираюсь в этой проблеме, но ничего не найдено об этом.

Итак, есть приложение, которое содержит две коллекции: EventsCollection и RacesCollection и работает на сервере 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.raceId, race.raceName. Как это реализовать? Есть ли какой-либо метод getter для доступа к определенному полю данных?

И как перебирать несколько строк в race, если оно содержит количество строк?

Любая рекомендация будет оценена.

4b9b3361

Ответ 1

Метод 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() для итерации над документами курсора, как в в этом примере.

Ответ 2

использовать ForEach:

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

Ответ 3

У меня была одна и та же проблема, и 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 );
}

Ответ 4

Ответы Sekai, однако, написаны с точки зрения MongoDB. Из помощника JavaScript Meteor, используя переменные, используемые в вопросе, он будет выглядеть так:

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