【问题标题】:Accessing MongoDB collection values in JavaScript在 JavaScript 中访问 MongoDB 集合值
【发布时间】:2012-10-09 00:24:02
【问题描述】:

我是 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包含行数,如何遍历多行?

任何推荐都会被采纳。

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    使用 ForEach :

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • forEach 可用于数组,但不能用于 MongoDB Cursor。如果你想这样做,你必须在光标上调用toArray
      • @JohnnyHK - 似乎(查看我在问题中发布的最后一个示例)Meteor 不需要 toArray 调用(即使其他基于 javascript 的驱动程序需要)。
      • 有趣。因此,meteor 必须在驱动程序之上添加自己的层来支持它。
      • @shelman .. 我试过你的代码,但它在谷歌浏览器的 JAVASCRIPT CONSOLE 上显示以下错误:Uncaught TypeError: Object [object Object] has no method 'hasNext'
      • 是的。我的问题与@sohelkhalifa 相同。有趣的是文档声明有一个 hasNext 方法。 docs.mongodb.org/manual/reference/method/cursor.hasNext
      【解决方案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 );
      }
      

      【讨论】:

      • 最好使用forEach 方法,而不是自己获取文档并循环遍历它们。请参阅 Sekai 的答案。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-12
        • 2015-02-02
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 1970-01-01
        相关资源
        最近更新 更多