sql >> Database >  >> NoSQL >> MongoDB

On-the-fly nieuwe Meteor-collecties maken

Ik ben er niet helemaal zeker van dat dit zal werken:

Je hebt het in twee delen nodig, de eerste om collecties te laden die je eerder hebt ingesteld (zowel op de client als op de server)

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

En je hebt een beetje nodig om de collecties op de server toe te voegen:

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

En u moet ze op de client maken:

//Create the collection:

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

Nogmaals, dit is allemaal niet getest, dus ik probeer het gewoon, hopelijk werkt het.

BEWERKEN

Misschien zou het onderstaande moeten werken, ik heb een paar controles toegevoegd om te zien of de collectie eerst bestaat. Kunt u alstublieft meteor reset uitvoeren voordat je het gebruikt om bugs uit de bovenstaande code te sorteren:

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

Zorg er ook voor dat uw namen javascript-escaped zijn.



  1. MongoDB verwijderen()

  2. Fout:Opnieuw verbinding maken met 127.0.0.1:6379 mislukt - verbind ECONNREFUSED 127.0.0.1:6379

  3. Wat is het verschil tussen area en BoundingBox uit de broncode van Redis?

  4. Redis versus RabbitMQ als een gegevensmakelaar / berichtensysteem tussen Logstash en elasticsearch