Comment puis-je utiliser les nouvelles Météore.Collection.ObjectID() dans mon mongo requêtes avec meteor?
J'ai une Collection de documents avec un tableau d'objets imbriqués.
Voici luminaire code pour remplir la base de données:
if (Parents.find().count() == 0) {
var parentId = Parents.insert({
name: "Parent One"
});
Children.insert({
parent: parentId,
fields: [
{
_id: new Meteor.Collection.ObjectID(),
position: 3,
name: "three"
},
{
_id: new Meteor.Collection.ObjectID(),
position: 1,
name: "one"
},
{
_id: new Meteor.Collection.ObjectID(),
position: 2,
name: "two"
},
]
});
}
Vous pourriez vous demander, pourquoi ai-je besoin d'un ObjectID quand je peux juste le mettre à jour basé sur des noms. C'est un exemple simplifié d'un beaucoup plus complexe schéma que je suis en train de travailler sur et de le l'objet imbriqué vont être créées dynamiquement, de l'ObjectID sont certainement nécessaires pour faire ce travail.
En gros, j'ai besoin d'un moyen de sauver ces objets imbriqués avec un ID unique et être en mesure de mettre à jour les champs par leur _id.
Voici ma Méthode, et l'appel, je suis en train de faire depuis le navigateur de la console:
Meteor.methods({
upChild: function( options ) {
console.log(new Meteor.Collection.ObjectID());
Children.update({_id: options._id, "fields._id": options.fieldId }, {$set: {"fields.$.position": options.position}}, function(error){
if(error) {
console.log(error);
} else {
console.log("success");
}
});
}
});
Mon appel à partir de la console:
Meteor.call('upChild', {
_id: "5NuiSNQdNcZwau92M",
fieldId: "9b93aa1ef3868d762b84d2f2",
position: 1
});
Et voici une capture d'écran du code html de là où je suis rendu toutes les données pour les Parents et les Enfants collections:
OriginalL'auteur Scott | 2013-10-07
Vous devez vous connecter pour publier un commentaire.
Juste une observation, que je cherchais comment générer des Identifiants uniques côté client, pour une raison similaire. J'ai trouvé l'appel de nouveau Météore.Collection.ObjectID() a été de retourner un objet dans le formulaire 'ObjectID("abc...")'. Par l'affectation d'un Météore.Collection.ObjectID()._str à _id, j'ai eu de la chaîne comme "abc..." à la place, qui est ce que je voulais.
J'espère que cette aide, et je serais curieux de savoir si quelqu'un a une meilleure façon de gérer cela?
Jason
Alors, est-il un moyen de garantir l'unicité de l'identifiant tandis que le stockage d'une chaîne de la forme de l'identifiant généré?
Cela a fonctionné pour moi que ma demande avait également pour travailler hors ligne, donc il n'y a aucun moyen de garantir l'unicité sur le serveur tout le temps. Le Météore de la documentation pour la routine utilisée (docs.meteor.com/#/full/random) implique que le code standard est probablement pour être unique au monde. Cependant, vous pourriez envisager une autre méthode si vous êtes susceptibles de générer des millions d'enregistrements.
OriginalL'auteur Raz
Éviter d'utiliser le _str car cela peut changer dans le futur. Utilisez ceci:
new Meteor.Collection.ObjectID().toHexString()
ounew Meteor.Collection.ObjectID().valueOf()
Vous pouvez également utiliser la langue officielle aléatoire paquet:
Random.id()
OriginalL'auteur Bruno Lemos