Obtenir Meteor collection par nom
Supposons que j'écris:
new Meteor.Collection("foos");
new Meteor.Collection("bars");
Est-il une API pour accéder à ces collections par son nom? Quelque chose comme Meteor.Collection.get(name)
, où name
est "foos"
ou "bars"
? Je sais que je pourrais écrire quelque chose comme
var MyCollections = {
foos: new Meteor.Collection("foos");
bars: new Meteor.Collection("bars");
}
et ensuite utiliser MyCollections[name]
, mais je préfère utiliser une API existante si celle-ci existe.
Vous devez vous connecter pour publier un commentaire.
Aussi loin que je peux voir dans le
collection.js
source il n'y a actuellement aucun moyen de l'api pour obtenir une Collection existante par un nom, une fois qu'il a déjà été initialisé sur le serveur. Il ne serait probablement pas difficile d'ajouter cette fonctionnalité.Alors, pourquoi ne pas la fourche Meteor et de soumettre un patch ou créer un smart package et de le partager, je suis sûr qu'il y a d'autres là-bas qui aimeraient avoir la même fonction.
Meteor.connection._mongo_livedata_collections
Basé sur Shane Donelley de mongoinspector
https://github.com/shanedonnelly1/mongoinspector
var globals = Function('return this')();
pour obtenir une référence à l'objet Global. Afin de remplacer fenêtre avec variables globales dans le code.window
objet au lieu de le faire:getCollection = function (string) { return (window && window[string] && window[string] instanceof Meteor.Collection) ? window[string] : undefined; }
J'ai juste trouvé que le paquet : https://github.com/dburles/mongo-collection-instances/
Il vous permet d'
Espère que ça aidera
Cette fonctionnalité a été ajoutée à Meteor en Février 2016: "Fournir un moyen d'accéder à des collections de magasins sur le client"
Il fonctionne comme ceci:
Meteor.connection._stores['tasks']._getCollection();
Et j'ai été en utilisant comme suit pour tester insère à l'aide de la console javascript:
Meteor.connection._stores['tasks']._getCollection().insert({text:'test'});
Pour l'insert, il fallait que le
insecure
paquet de toujours être installé autrement a eu un message de refus d'accès.Noter qu'ils ont une valeur de retour, de sorte que vous pouvez juste faire
et l'utilisation
Patterns
partout.Et quand vous en avez besoin pour vous abonner aux mises à jour du serveur, fournir
"patterns"
àMeteor.subscribe()
.Si vous avez le même code pour de multiples collections, le risque est grand que vous êtes en train de faire quelque chose de mal d'un point de vue génie logiciel; pourquoi ne pas utiliser une collection unique avec un
type
champ (ou autre chose qui différencie les documents) et de l'utiliser à la place de l'utilisation de plusieurs collections?new Mongo.Collection
appel renvoie un objet de collection. D'autre part, en fournissant simplement le nom de la collection àMeteor.subscribe()
peut ne pas fonctionner si la fonction publier utilise un nom différent. Voir Comprendre le Météore de la publication/abonnement pour plus de détails.Avec https://github.com/dburles/mongo-collection-instances vous pouvez utiliser
Mongo.Collection.get('collectionname')
Notez que le paramètre que vous insérez est le même que celui que vous utilisez lors de la création de la collection. Ainsi, si vous utilisez
const Products = new Mongo.Collection('products')
alors vous devriez utiliserget('products')
(en minuscules).Plutôt que de les regarder, j'ai juste fait:
ou, éventuellement, de le mettre à l'intérieur d'un autre objet. Je n'ai pas vraiment été prise d'une des Collections d'objet de collection.
Il semble y avoir aucun moyen d'obtenir à la enveloppé Météore.Objet de Collection sans l'enregistrer au moment de la création, comme d'autres l'ont mentionné.
Mais il y a au moins un moyen de la liste de tous créé des collections, et les fait accéder à la correspondante de Mongo LocalCollection objet. Ils sont disponibles à partir de Meteor objet de Collection, donc, pour la garder generalistic vous pouvez créer un mannequin collection vient de pour cette. L'utilisation d'une méthode en tant que telle (CoffeeScript):
Ces objets disposent de toutes les trouver, findOne, mise à jour et al méthodes, et même certains que le Météore ne semble pas exposer, comme pauseObservers et resumeObservers qui me semblent intéressants. Mais je n'ai pas essayé de jouer avec ce mongo LocalCollection référence directement à knowif il va mettre à jour le serveur de collection en conséquence.
À en juger par ce que les collection.js n', la ligne que nous utilisons pour instancier l'objet de collection ouvre une connexion à la base de données et les looks de la collection correspondant au nom que nous donnons. Dans ce cas, une connexion est établie et la collection "totos" est lié à la Meteor.Objet de Collection 'bars'. Voir
collection.js
ETremote_collection_driver.js
dans le mongo-livedata paquet.Comme on le fait avec MongoDB, tandis que vous le pouvez, vous n'avez pas explicitement à créer des collections. Comme indiqué dans la MongoDB documentation:
Donc, je pense que vous êtes après est-ce que vous avez déjà - à moins que j'ai pas du tout compris ce que vous avez des intentions.
À personne de venir avec une solution pour cela? Ce serait génial d'être en mesure de le faire:
et avoir de code de modèle comme
Qui serait vraiment utile, car j'ai remarqué que certaines redondances faire w/meteor modèle aides...
Vous pouvez toujours passer votre propre collecte automatique de lecture.
Dire que vous avez un couple de collections appelées "Entreprises" et "Clients". Mettre une référence à chaque dans certains des "collections" de l'objet et enregistrer un Guidon de l'aide pour accéder à ces "collections" par les collections["nom"].
c'est à dire mettre quelque chose comme ceci sur le côté client
main.js
:Ensuite dans votre code HTML, tout simplement se référer à la collection en nom:
Regardez ma, pas plus générique de "liste de tous les enregistrements" standard js nécessaire!