【发布时间】:2018-07-13 14:00:06
【问题描述】:
我正在尝试获取新插入的 Id,以便可以将 Id 推送到另一个集合中。
根据这篇文章 => Meteor collection.insert callback to return new id 和这篇文章 => Meteor collection.insert callback issues,我应该可以
return Collection.insert(obj);
它会将新插入数据的 ID 返回给我的客户端。
相反,我得到了一个像这样的 Observable:
{_isScalar: false}
_isScalar: false
__proto__:
constructor: f Object()
hasOwnProperty: f hasOwnProperty()
//many other object properties
文档似乎很清楚,我应该得到 ID 作为回报。这是一个错误吗? https://docs.meteor.com/api/collections.html#Mongo-Collection-insert]
我的流星版本是 1.4.4.5... 我已经在这个问题上工作了几天,并且尝试了多种不同的方式来获取 ID,但我没有尝试任何结果。
这是我的完整代码供参考:
服务器:
submitStuff: function(data): string{
var loggedInUser = Meteor.user();
if (!loggedInUser || !Roles.userIsInRole(loggedInUser,['user','admin'])){
throw new Meteor.Error("M504", "Access denied");
} else {
try{
let insertedData = null;
const model: MyModel[] = [{
data.stuff //bunch of data being inserted
}];
model.forEach((obj: MyModel) => {
insertedData = Collection.insert(obj);
});
return insertedData;
} catch(e) {
throw new Meteor.Error(e + e.reason, "|Throw new error|");
}
}
},
客户:
Meteor.call('submitData', data, (error, value) => {
if(error){
this.errors.push(error + error.reason + "|new Error code|");
}
else{
Meteor.call('userPushId', value, (error) => { //this pushes Id onto the second collection
if(error){
this.errors.push(error + error.reason + "|new Error code|");
}
});
}
【问题讨论】:
-
您真的不需要/不应该将 Id 发送回客户端以写入另一个集合。您可以轻松地将写入内容放在第一个集合之后立即写入第二个集合。 Meteor 默认等待数据库调用,因此顺序写入的 dB 写入/读取顺序发生。
-
是的,我试图/想要这样做。我只是在测试将它发送给客户.. 真的抓住了稻草
-
所以问题是插入通常不返回 id?能否成功将id登录到服务器上的控制台?
-
正确。我只能从 insert 方法中记录一个 Observable ......我也尝试在第二个参数中使用回调。回调不会将任何内容记录到控制台。
-
哦。我想我明白了什么。当我参加比赛时,我会写一个解决方案。如果您将 foreach 更改为 map,您应该得到一个 id 数组。我会在一个小时左右的时间内进一步研究它
标签: javascript mongodb meteor observable angular-meteor