我想在meteor.collection.insert的回调中获取新插入的docuement的id。
我按如下方式插入文档:
Meteor.call('createDoc', {
key1: value1,
key2: value2
})
createDoc函数如下所示:
Meteor.methods createDoc: (options) ->
incidents.insert
key1: options.value1
key2: options.value2
, callback(error, result)
callback = (error,result) ->
console.log result
文档说:
callback Function
Optional. If present, called with an error object as the first argument and,
if no error,the _id as the second.
所以我希望结果返回新的id,但是我得到一个引用错误,说错误和结果没有定义。我在这里弄错了什么?任何帮助都非常值得赞赏。
答案 0 :(得分:4)
你大多都有正确的想法,但你会混淆几件事。目前,您的Meteor方法没有返回任何内容,因为您通过提供回调异步调用插入。可以完成异步方法返回,但它比你需要的东西复杂得多(请查看此excellent async guide以获取更多信息)。
您可以使用不带回调的insert方法而不是回调,并将其分配给变量,如var incidentId = Incidents.insert({ ... });
- 返回。
然后,在Meteor.call
的客户端回调中,结果应该是_id。
答案 1 :(得分:0)
从客户端,如果从Meteor.methods返回,您的回调函数结果将返回最后插入的对象ID。
Meteor.call('addURL', url, function (error, result) {
urlId = result;
});
Meteor.methods({
addURL : function(url) {
return URL.insert(url);
}
});
urlId具有最后插入对象的id。
答案 2 :(得分:-1)
BenjaminRH对于更容易,更可能的方法是正确的。但是,有时您需要服务器来完成工作,和/或某些人坚持认为这是在流星中进行数据库工作的唯一方法,以及您的代码如何执行此操作:
# server code
Meteor.methods createDoc: (options) ->
created = incidents.insert
key1: options.value1
key2: options.value2
created
# on client code
Meteor.call 'createDoc', info, (err, data) ->
if err
console.log JSON.stringify err,null,2
# DO SOMETHING BETTER!!
else
Session.set('added doc', data )
# and something reactive in waiting for session to have 'added doc'