Подтвердить что ты не робот

Извлечь _id после вставки в вызов Meteor.method

Мне нужно получить _id после вставки документа.

В клиенте:

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

В сервере

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

Я попытался с функцией обратного вызова вставки на стороне сервера. Таким образом, я могу получить документ _id, но внутри функции обратного вызова, и это не может вернуться к вызову клиента:

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.
}
4b9b3361

Ответ 1

ваш клиентский вызов должен использовать асинхронный стиль - из документов

На клиенте, если вы не передадите обратный вызов, и вы не находитесь в заглушке, вызов вернет undefined, и у вас не будет способа получить возвращаемое значение метода.

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

то вы просто возвращаете идентификатор из метода

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

для хорошей меры дайте один раз этим двум разделам документов

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

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

Ответ 2

нашел этот вопрос, когда у меня была та же проблема, получил это решение использовать .insert() на стороне клиента, и он прекрасно работает с обратным вызовом. Что-то вроде этого:

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