sql >> データベース >  >> NoSQL >> MongoDB

その場で新しいMeteorコレクションを作成する

    これが機能するかどうかは完全にはわかりません:

    2つに分けて必要です。最初に、以前に設定したコレクションを(クライアントとサーバーの両方で)ロードします。

    var collections = {};
    var mysettings = new Meteor.Collection('settings') //use your settings
    
    //Startup
    Collectionlist = mysettings.find({type:'collection'});
    
    Collectionlist.forEach(function(doc) {
        collections[doc.name] = new Meteor.Collection(doc.name);
    })'
    

    また、サーバーにコレクションを追加するには少し必要です:

    Meteor.methods({
        'create_server_col' : function(collectionname) {
           mysettings.insert({type:'collection', name: collectionname});
           newcollections[collectionname] = new Collection(collectionname);
           return true;
        }
    });
    

    そして、クライアントでそれらを作成する必要があります:

    //Create the collection:
    
    Meteor.call('create_server_col', 'My New Collection Name', function(err,result) {
        if(result) {
            alert("Collection made");
        }
        else
        {
            console.log(err);
        }
    }
    

    繰り返しになりますが、これはすべてテストされていないので、うまくいけば試してみます。

    編集

    おそらく以下が機能するはずです。コレクションが最初に存在するかどうかを確認するために、いくつかのチェックを追加しました。 meteor resetを実行してください 上記のコードからバグを分類するために使用する前に:

    var collections = {};
    var mysettings = new Meteor.Collection('settings')
    
    if (Meteor.isClient) {
      Meteor.startup(function() {
        Collectionlist = mysettings.find({type:'collection'});
    
        Collectionlist.forEach(function(doc) {
            eval("var "+doc.name+" = new Meteor.Collection("+doc.name+"));
        });
      });
      Template.hello.greeting = function () {
        return "Welcome to testColl.";
      };
    
      var collectionname=prompt("Enter a collection name to create:","collection name")
    
      create_collection(collectionname);
    
      function create_collection(name) {
        Meteor.call('create_server_col', 'tempcoll', function(err,result) {
            if(!err) {
                if(result) {
                    //make sure name is safe
                    eval("var "+name+" = new Meteor.Collection('"+name+"'));
                    alert("Collection made");
                    console.log(result);
                    console.log(collections);
                } else {
                    alert("This collection already exists");
                }
            }
            else
            {
                alert("Error see console");
                console.log(err);
            }
        });
      }
    }
    
    if (Meteor.isServer) {
      Meteor.startup(function () {
        // code to run on server at startup
        Collectionlist = mysettings.find({type:'collection'});
    
        Collectionlist.forEach(function(doc) {
            collections[doc.name] = new Meteor.Collection(doc.name);
        });
      });
    
      Meteor.methods({
        'create_server_col' : function(collectionname) {
           if(!mysettings.findOne({type:'collection', name: collectionname})) {
            mysettings.insert({type:'collection', name: collectionname});
    
            collections[collectionname] = new Meteor.Collection(collectionname);
    
            return true;
           }
           else
           {
            return false; //Collection already exists
           }
        }
      });
    }
    

    また、名前がjavascriptでエスケープされていることを確認してください。



    1. スプリングブートを使用して多くのタイムアウトが発生した場合にredisを無効にする

    2. redis-trib.rbを使用してクラスターを作成するときに接続エラーが発生しますか?

    3. 複数のサブスクライバーをRedisする

    4. 確実にMongoDBに再接続する