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

时间:2013-05-08 11:07:07

标签: meteor

我需要在插入文档后检索_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.
}

2 个答案:

答案 0 :(得分:38)

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

  

在客户端上,如果你没有传递一个回调并且你不在一个存根中,那么调用将返回undefined,你将无法获得该方法的返回值。

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

然后你只需从方法中返回id

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

对于良好的衡量标准,对文档的这两个部分进行了一次

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

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

答案 1 :(得分:0)

当我遇到同样的问题时发现了这个问题,得到了这个解决方案 在客户端使用.insert(),它可以与回调正常工作。像这样:

]$ db2 "with t(s) as ( values '123456-7890', '12345*-7890' ) 
select s, 'regexp' as method from t 
where regexp_like(s, '[^ 0123456789-]|^-|-$') 
union all 
select s, 'translate' as method 
from t where TRANSLATE(s, '', '0123456789-')<>''"

S           METHOD   
----------- ---------
12345*-7890 translate
12345*-7890 regexp   

2 record(s) selected.