【问题标题】:How do I use a dynamic variable as a Meteor/MongoDB collection name?如何使用动态变量作为 Meteor/MongoDB 集合名称?
【发布时间】:2015-07-28 23:00:26
【问题描述】:

所以我尝试了这个,但它不起作用(在 isServer 上):

var tableName= "";
(...)
if (silly_cond === 1){
    tableName = "Table1";
}else{
    tableName = "Table2";
}
TableCol = new Mongo.Collection(tableName);

由于某种原因,我无法让它工作。好像只接受

TableCol = new Mongo.Collection("Table1");

想法是从表 ID 中获取表名,并将相同的 JS 应用于不同的表(在不同的模板上)。我做错了什么?

【问题讨论】:

    标签: mongodb variables collections meteor


    【解决方案1】:

    需要在函数外声明tableName,否则看不到。

    var tableName = "";
    if (silly_cond === 1){
        tableName = "Table1";
    }else{
        tableName = "Table2";
    }
    TableCol = new Mongo.Collection(tableName);
    

    【讨论】:

    • 谢谢,但没用。我还尝试在没有“var”的情况下声明 var(在创建全局 var 的 Meteor 中)。还是不行=/
    • 我没有收到错误,我只是无法访问客户端中的集合。它运行良好,直到我尝试通过变量更改集合名称(在 isServer 上),即使我在根目录 .js 文件中声明了该变量。
    • 您在上面说您的代码在 isServer 中 - 所以客户端代码无法访问它
    • 忘记最后的评论。我知道您要做什么,不知道这是否可能或含义是什么。你正在改变一个集合的发布,对吧?不要以为我能帮上那么多忙。我会看看我能找到什么。可能是您的代码只被调用一次?您必须更详细地显示所有代码。
    • 找到了一个遮阳篷。我需要使用 Meteor.Collection 而不是 Mongo.Collection 我不知道有什么区别,但现在可以了。我会进一步研究
    【解决方案2】:

    我最终使用了dburles:mongo-collection-instances package。它让我可以通过集合名称访问任何集合。所以在我的例子中:

    TableCol = new Mongo.Collection("Table1");
    

    使用上面我写的包为例:

    var dbvar = "Table1";
    Meteor.Collection.get(dbvar).find()
    

    这样我可以使用变量来获取集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 2017-01-14
      • 1970-01-01
      • 2016-09-08
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多