如何将集合名称作为参数传递给Meteor中的方法?

时间:2015-07-04 17:44:16

标签: meteor

感谢我英语能力差,我已经通过以下代码表达了我的想法。

友情编辑:

我正在尝试编写一个广义的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"
        )

2 个答案:

答案 0 :(得分:1)

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

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

例如:

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

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

if isConfirm
  Collections[collectionName].remove(itemId)

答案 1 :(得分:0)

只需在此处添加一个替代项(即使问题确实很老):您可以将集合本身​​作为参数传递,它将起作用。

由于集合是一个对象,当您将其作为参数传递时,它将“通过引用”传递,并且可以调用其方法。

以下是@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);