流星 Collection.insert() 不返回 Id
Meteor Collection.insert() not returning Id
我正在尝试获取新插入的 Id,以便将 Id 推送到另一个集合。
据此post =>
Meteor collection.insert callback to return new id and this post => Meteor collection.insert callback issues,我应该可以
return Collection.insert(obj);
然后它将return新插入数据的ID给我的客户端。
相反,我得到了一个像这样的 Observable:
{_isScalar: false}
_isScalar: false
__proto__:
constructor: f Object()
hasOwnProperty: f hasOwnProperty()
//many other object properties
文档似乎很清楚我应该在 return 中获取 ID。这是一个错误吗? https://docs.meteor.com/api/collections.html#Mongo-Collection-insert]
我的流星版本是1.4.4.5...
我已经在这个问题上工作了几天,我尝试了很多不同的方法来获取 ID,但我尝试过的任何方法都没有得到 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|");
}
});
}
服务器
// ...
try {
const myModels = [{ ...whatever }];
// I'm using map so I return an array of id's.
//your forEach about technically should end up with only one id,
// which is the last insertion
const insertedDataIds = myModels.map(model => Collection.insert(model));
// you can also write to the secondary location here with something like:
const secondaryWrite = SecondaryCollection.insert({ something: insertedDataIds });
return insertedDataId's
}
//...
客户端
我也不知道这是否只是堆栈上的错字,但您的 Meteor.call('submitData')
应该是 Meteor.call('submitStuff')
但这可能不是您的实际问题。
好的,所以在四处搜索后我意识到我在创建集合时使用 angular-meteors rxjs 包来创建 MongoObservable
而不是 Mongo 的常规集合。
因为我正在使用 MongoObservable
并尝试在其上调用 .insert()
,所以 return 与常规 Mongo 集合有点不同,并且 return 一个 Observable 而不是 Id。 Documentation Here
如果您在集合名称后添加 .collection
,您将在 return 中获得 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 id = new Mongo.ObjectID();
const model: MyModel[] = [{
data.stuff //bunch of data being inserted
_id:
}];
model.forEach((obj: MyModel) => {
insertedData = Collection.collection.insert(obj); //added .collection
});
return insertedData;
} catch(e) {
throw new Meteor.Error(e + e.reason, "|Throw new error|");
}
}
},
我正在尝试获取新插入的 Id,以便将 Id 推送到另一个集合。
据此post => Meteor collection.insert callback to return new id and this post => Meteor collection.insert callback issues,我应该可以
return Collection.insert(obj);
然后它将return新插入数据的ID给我的客户端。
相反,我得到了一个像这样的 Observable:
{_isScalar: false}
_isScalar: false
__proto__:
constructor: f Object()
hasOwnProperty: f hasOwnProperty()
//many other object properties
文档似乎很清楚我应该在 return 中获取 ID。这是一个错误吗? https://docs.meteor.com/api/collections.html#Mongo-Collection-insert]
我的流星版本是1.4.4.5... 我已经在这个问题上工作了几天,我尝试了很多不同的方法来获取 ID,但我尝试过的任何方法都没有得到 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|");
}
});
}
服务器
// ...
try {
const myModels = [{ ...whatever }];
// I'm using map so I return an array of id's.
//your forEach about technically should end up with only one id,
// which is the last insertion
const insertedDataIds = myModels.map(model => Collection.insert(model));
// you can also write to the secondary location here with something like:
const secondaryWrite = SecondaryCollection.insert({ something: insertedDataIds });
return insertedDataId's
}
//...
客户端
我也不知道这是否只是堆栈上的错字,但您的 Meteor.call('submitData')
应该是 Meteor.call('submitStuff')
但这可能不是您的实际问题。
好的,所以在四处搜索后我意识到我在创建集合时使用 angular-meteors rxjs 包来创建 MongoObservable
而不是 Mongo 的常规集合。
因为我正在使用 MongoObservable
并尝试在其上调用 .insert()
,所以 return 与常规 Mongo 集合有点不同,并且 return 一个 Observable 而不是 Id。 Documentation Here
如果您在集合名称后添加 .collection
,您将在 return 中获得 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 id = new Mongo.ObjectID();
const model: MyModel[] = [{
data.stuff //bunch of data being inserted
_id:
}];
model.forEach((obj: MyModel) => {
insertedData = Collection.collection.insert(obj); //added .collection
});
return insertedData;
} catch(e) {
throw new Meteor.Error(e + e.reason, "|Throw new error|");
}
}
},