web-dev-qa-db-fra.com

Récupérer _id après insertion dans un appel Meteor.method

Je dois récupérer le _id après avoir inséré un document.

Chez le client:

Meteor.call('saveDocument', value1, value2);

En serveur

saveDocument: function (value1, value2) {
    MyCollection.insert({ 'value1': value1, 'value2': value2});
}

J'ai essayé avec la fonction de rappel de l'insertion du côté serveur. De cette façon, je peux obtenir le _id du document, mais à l'intérieur de la fonction de rappel et cela ne peut pas retourner à l'appel du client:

saveDocument: function (value1, value2) {
    MyCollection.insert({ 'value1': value1, 'valu2': value2}, 
        function(err, docsInserted){ console.log(docsInserted) }); 
        //Works, but docsInserted can't return to the client.
}
25
Oscar Saraza

votre appel client doit utiliser le style asynchrone - à partir de la documentation 

Sur le client, si vous ne passez pas de rappel et que vous n'êtes pas dans un stub, call retournera undefined et vous ne pourrez pas obtenir la valeur de retour de la méthode.

Meteor.call('saveDocument', value1, value2, function(error, result){
  var theIdYouWant = result;
});

alors vous retournez juste l'id de la méthode

saveDocument: function (value1, value2) {
  return MyCollection.insert({ 'value1': value1, 'valu2': value2}); 
}

pour faire bonne mesure, donnez une fois à ces 2 sections de la documentation

http://docs.meteor.com/#meteor_call

http://docs.meteor.com/#insert

38
nate-strauser

a trouvé cette question lorsque j'ai eu le même problème, a obtenu cette solution , utilisez .insert () du côté client et cela fonctionne bien avec le rappel. Quelque chose comme ça: 

Collection.insert({
    something: something    //insert to Mongo
}, (error, response) => {
    console.log(error, result   //get the response
)});
0
Simon