【问题标题】:Meteor find not returning data流星发现不返回数据
【发布时间】:2015-05-19 20:03:11
【问题描述】:

我的收藏是在 collections.js 中创建的

portfolioCategories = new Mongo.Collection('portfoliocategories');

然后在subscriptions.js中订阅

Meteor.subscribe('portfoliocategories');

并发表在publications.js中

Meteor.publish('portfoliocategories',function(){
    return portfolioCategories.find();
});

如果我使用 db.portfoliocategories.find() 从服务器查询 Mongo 我会得到

{ "_id" : "W9AeauCpMgPw2j5hf", "title" : "商业设计", "slug" : "commercial-design", "image" : "https://url/9c3ba46d-c09a-4a7d-ac40-5752fc24ad2c.jpg" }

然而,从客户端和 Ironrouter 中,find 什么都没有返回。例如,如果我在控制台中输入:

portfolioCategories.find({'_id':'W9AeauCpMgPw2j5hf'});

我会得到一个带有未定义键值的 LocalCollection.Cursor:

_selectorId: 未定义

_transform: null

集合:LocalCollection

字段:未定义

限制:未定义

如果我尝试将其作为数据返回,那么在 Iron-router 中也会发生同样的事情。但是,如果我使用 findOne,我会得到文档。

portfolioCategories.findOne({'_id':'W9AeauCpMgPw2j5hf'})

Object { "_id" : "W9AeauCpMgPw2j5hf", "title" : "商业设计", "slug" : "commercial-design", "image" : "https://url/9c3ba46d-c09a-4a7d-ac40-5752fc24ad2c.jpg" }

我的问题是我需要返回所有具有相同标题的项目。因此,findOne() 不是一个合适的解决方案。

我错过了什么?

【问题讨论】:

  • find 返回一个游标,您可以在游标上调用fetch 来获取文档数组。可以给出完整的答案,详细说明您希望如何使用这些文档。
  • 那么正确的语法更像portfolioCategories.find().fetch() 吗?
  • 然而,另一个好奇心是我正在尝试做的工作适用于其他模板。例如featuredItems: function () { return projectsPortfolio.find({'featured':true}); } 工作得很好,而且应该如此。
  • (a) 是的,如果你想要一个文档数组,这就是语法,(b) 是的,模板接受光标和数组作为输入。
  • 感谢您与我一起解决这个问题,我的橡皮鸭没有帮助。我将提供一个后续答案,因为真正的问题是我对 Iron-router 的数据对象和模板助手的理解存在差异。

标签: javascript mongodb meteor iron-router


【解决方案1】:

之所以会出现混乱,是因为 Iron-router 的数据对象之间存在差异。我试图从 Iron-router 做的是

waitOn:function(){

    return [Meteor.subscribe('projectsportfolio'),Meteor.subscribe('portfoliocategories')];

}
data:function(){
    currentSlug = this.params.category;
    currentCategory = projectsPortfolio.find({slug:currentSlug});
    if(typeof currentCategory != 'undefined'){
        return currentCategory
    }
}

但是正如@David Weldon 解释的那样,这只返回一个游标。 解决办法是:

data:function(){
    currentSlug = this.params.category;
    currentCategory = projectsPortfolio.find({slug:currentSlug}).fetch();
    if(typeof currentCategory != 'undefined'){
        return currentCategory
    }
}

currentCategory 现在将是一个对象数组,我现在可以在我的模板中循环遍历这些对象

{{#each currentCategory}}
    {{keyvalue}}
{{/each}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2015-01-23
    • 2014-06-21
    相关资源
    最近更新 更多