【问题标题】:How to pass a collection name as an argument into methods in Meteor?如何将集合名称作为参数传递给 Meteor 中的方法?
【发布时间】:2020-10-01 06:05:24
【问题描述】:

感谢我糟糕的英语水平,我可以通过下面的这些代码表达我的想法..

友好编辑:

我正在尝试编写一个通用的confirmAndRemoveCollection 方法,该方法接受collectionNameitemId,我想对这个集合执行操作。由于collectionName 是一个字符串,我将无法对其执行数据库操作。有人可以建议我如何使用集合名称来访问实际的集合对象。

confirmAndRemoveCollection:(collectionName,itemId)->
    check(itemId,String)
    check(collectionName,String)
    sweetAlert({
            title:"confirm"
            text:"blabla"
            type:"info"
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: "delete"
            cancelButtonText: "cancel"
            closeOnConfirm: false,
        },(isConfirm)->
        if isConfirm
            collectionName.remove(itemId)
        else
            return
        swal(
            'success'
            "selected item deleted"
            "success"
        )

【问题讨论】:

  • “集合”是键值属性的集合(即对象)还是对象的集合(即数组)?

标签: meteor


【解决方案1】:

变量collectionName 是一个字符串对象,因此您将无法在其上调用 MongoDB 方法。

完成任务的一种方法是创建一个将字符串名称映射到集合对象的对象。

例如:

Posts = new Mongo.Collection('posts'); Comments = new Mongo.Collection('comments'); Collections = { 'Posts': Posts, 'Comments': Comments };

然后你可以在你的代码中做这样的事情

if isConfirm
  Collections[collectionName].remove(itemId)

【讨论】:

    【解决方案2】:

    只是在这里添加一个替代方案(即使问题真的很老了):您可以将集合本身​​作为参数传递,它会起作用。

    由于集合是一个对象,当您将它作为参数传递时,它将“通过引用”传递,您将能够调用它的方法。

    按照@FullStack 的示例(当然也可以):

    Posts = new Mongo.Collection('posts');
    Comments = new Mongo.Collection('comments');
    
    const collectionRemove = (collection, id) => {
        const count = collection.remove(id);
        console.log(`Removed ${count} items with id ${id} from collection ${collection._name}`)
    }
    

    然后执行以下操作:

    collectionRemove(Posts, 1);
    collectionRemove(Comments, 24);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多