CONTEXT
我有一个收藏品(“场地”)。我试图允许用户将新对象(“房间” - 定义为子模式)添加到场地对象的实例。每个房间都应该有一个唯一的ID(在collection2架构中使用autovalue)。
问题/我做了什么
我尝试了两种方法:
Exception while invoking method 'addRoom' MongoError: Cannot update 'roomPricing' and 'roomPricing.roomId' at the same time
。如果我从集合中删除了Id,应用程序会更新“现有”房间值而不是创建一个“新”房间实例总之,我需要一种方法来更新“父”对象(场地),同时在“房间”子模式中创建一个新的“子”对象。
集合
Schema.RoomPricing = new SimpleSchema({
roomId: {
type: String,
autoValue: function(){
return Random.id();
},
optional: true
},
roomName: {
type: String,
max:50,
optional: true
}
}
// MAIN SCHEMA for the Venues colleciton.
Schema.Venues = new SimpleSchema({
venueName: {
type: String,
label: "Venue Name",
max: 200,
optional: false
},
roomPricing: {
type: Schema.RoomPricing,
optional: true
}
}
CONTROLLER&方法
var currentVenueId = this.params._id
var params = {
roomPricing: {
roomName: roomName,
sitCapacity: sitCapacity,
}
}
Meteor.call('addRoom', currentVenueId, params);
//Method
Meteor.methods({
'addRoom': function (id, params) {
Venues.insert({
_id: id
},{
$set:params});
}
});
答案 0 :(得分:1)
最后这是我使用的 - 需要$ push而不是$ set。
'addRoom': function (id, params) {
Venues.update({
_id: id
},{
$push:params});
}