如何在辅助函数之外使用 find/findOne

How to use find/findOne outside of a helper function

我正在尝试使用 findOne 语句在转换函数中访问集合中的文档。

  this.helpers({
    posts: function () {
      return Posts.find(this.getReactively('filter'), {sort: {createdAt: -1}, transform: function (doc) {
        var restaurant = Restaurants.findOne(doc.rest_id);
          doc.restaurant = restaurant.name;
          doc.neighborhood = restaurant.neighborhood;
        return doc;
      }});
    }
  });

问题是对 findOne 的调用 return 没有任何内容(未定义)。同样,使用 find.fetch() returns 一个空数组。

故障排除后,我发现 运行 在我的代码中的任何地方查找或 findOne 除了直接作为助手(即 return Posts.find() 工作正常)return没什么。我读到客户端此时可能还没有完成数据订阅,但客户端什么也没有显示。

运行 相同的 Restaurants.find 或 findOne 在控制台上工作正常,return 生成预期的文档。

我是否在尝试做一些 angular-meteor 不支持的事情?查找功能是否仅在助手的上下文中受支持?

我认为您在这里缺少的部分是 transform 函数正在被 Mongo 调用(即在 Mongo 调用中):这不是回调函数.

因此,您需要获取文档,然后为每个获取的文档查找一个。

this.helpers({
    posts: function () {
      var my_posts = Posts.find(this.getReactively('filter'), {sort: {createdAt: -1}).fetch();
      my_posts.forEach(function (doc) {
        var restaurant = Restaurants.findOne(doc.rest_id);
          doc.restaurant = restaurant.name;
          doc.neighborhood = restaurant.neighborhood;
        return doc;
      }
    });        
});