sql >> Databáze >  >> NoSQL >> MongoDB

Vytváření nových sbírek Meteor za běhu

Nejsem si úplně jistý, že to bude fungovat:

Potřebujete jej ve dvou částech, první k načtení sbírek, které jste dříve nastavili (na klientovi i na serveru)

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);
})'

A potřebujete trochu přidat sbírky na server:

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

A musíte je vytvořit na klientovi:

//Create the collection:

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

Opět je to vše nevyzkoušeno, takže to jen zkouším, doufám, že to bude fungovat.

UPRAVIT

Možná by mělo fungovat níže uvedené, přidal jsem několik kontrol, abych nejprve zjistil, zda sbírka existuje. Mohl byste prosím spustit meteor reset než jej použijete k třídění chyb z výše uvedeného kódu:

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
       }
    }
  });
}

Také se ujistěte, že vaše jména jsou kódována pomocí JavaScriptu.



  1. Funkce kláves Redis pro shodu s více vzory

  2. MongoDb - Změňte typ z Int na Double

  3. Jak používáte Mongoose bez definování schématu?

  4. Meteor:nahrávání souboru z klienta do kolekce Mongo vs souborový systém vs GridFS