在Meteor.method调用中插入后检索_id

在Meteor.method调用中插入后检索_id,meteor,Meteor,我需要在插入文档后检索_id 在客户端: Meteor.call('saveDocument', value1, value2); 服务器中 saveDocument: function (value1, value2) { MyCollection.insert({ 'value1': value1, 'value2': value2}); } 我尝试过在服务器端使用insert的回调函数。通过这种方式,我可以获取文档的_id,但在回调函数中,这无法返回到客户端调用: saveDo

我需要在插入文档后检索_id

在客户端:

Meteor.call('saveDocument', value1, value2);
服务器中

saveDocument: function (value1, value2) {
    MyCollection.insert({ 'value1': value1, 'value2': value2});
}
我尝试过在服务器端使用insert的回调函数。通过这种方式,我可以获取文档的_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.
}

您的客户端调用应该使用异步样式-来自文档

在客户机上,如果不传递回调且不在存根中,则调用将返回undefined,并且无法获取方法的返回值

然后您只需从该方法返回id

saveDocument: function (value1, value2) {
  return MyCollection.insert({ 'value1': value1, 'valu2': value2}); 
}
为了更好地衡量,请对文档的这两个部分进行一次检查


当我遇到同样的问题时发现了这个问题,得到了这个解决方案 在客户端使用.insert(),它可以很好地处理回调。大概是这样的:

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

我必须这样编写它才能工作:
saveDocument:function(value1,value2){var newDoc=MyCollection.insert({'value1':value1,'value2':value2});return newDoc;}
Collection.insert({
    something: something    //insert to Mongo
}, (error, response) => {
    console.log(error, result   //get the response
)});