Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor.js&;Collection2:在子模式中插入新对象的更新方法_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript Meteor.js&;Collection2:在子模式中插入新对象的更新方法

Javascript Meteor.js&;Collection2:在子模式中插入新对象的更新方法,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,上下文 我有一个收藏(“场地”)。我试图允许用户将新对象(“房间”——定义为子模式)添加到场地对象的实例中。每个房间都应该有一个唯一的id(在collection2架构中使用autovalue) 问题/我尝试过的 var currentVenueId = this.params._id var params = { roomPricing: { roomName: roomName, sitCapacity: sitCapacity,

上下文

我有一个收藏(“场地”)。我试图允许用户将新对象(“房间”——定义为子模式)添加到场地对象的实例中。每个房间都应该有一个唯一的id(在collection2架构中使用autovalue)

问题/我尝试过的

  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});
        }
    });
我尝试了两种方法:

  • inventures.insert-尝试创建新的整个场馆实例,而不是向roomPricing子架构添加新行
  • Vincements.update-使用“$set:params”调用方法“addRoom”MongoError时引发
    异常:无法同时更新“roomPricing”和“roomPricing.roomId”
    。如果我从集合中删除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
      }
    }
    
    控制器和方法

      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});
            }
        });
    

    最后,这就是我使用的-需要$push而不是$set

    'addRoom': function (id, params) {
    Venues.update({
         _id: id
       },{
         $push:params});
       }