Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Mongodb 更新集合中双嵌套数组中的对象_Mongodb_Meteor_Simple Schema - Fatal编程技术网

Mongodb 更新集合中双嵌套数组中的对象

Mongodb 更新集合中双嵌套数组中的对象,mongodb,meteor,simple-schema,Mongodb,Meteor,Simple Schema,具有此模式: Task = new SimpleSchema({ _id: { type: String, regEx: SimpleSchema.RegEx.Id, autoValue: function(){ return Random.id(); } }, title: { type: String, label: "Task title", } });

具有此模式:

 Task = new SimpleSchema({
      _id: {
        type: String,
        regEx: SimpleSchema.RegEx.Id,
        autoValue: function(){ return Random.id(); }
      },
      title: {
        type: String,
        label: "Task title",
      }
    });

Card = new SimpleSchema({
  _id: {    
    type: String,
    regEx: SimpleSchema.RegEx.Id,
    autoValue: function(){ return Random.id(); }
  },
  tasks: {
    type: [Task],
    label: "Card tasks",
    optional: true
  }
});

ProjectSchema = new SimpleSchema({
  name: {
    type: String,
    label: "Project name"
  },
  cards: {
    type: [Card],
    label: "Project cards",
    optional: true
  }
});
我正在尝试使用此函数更新它,通过编辑任务传递3个ID和一个对象:

    editTask : function(projectId,cardId,taskId,oTask) {

    if (! Meteor.userId()) {
        throw new Meteor.Error("not-authorized");
    }

    check(projectId, String);
    check(cardId, String);
    check(taskId, String);
    check(oTask, Object);

    Projects.update({
        _id: projectId,
        cards: {
            $elemMatch : {
                _id: cardId,
                tasks : {
                    _id : taskId
                }
            }
        }
    },
    {
        $set: {"tasks.$.Task": oTask}
    });
    }
错误说明:当修饰符选项为true时,验证对象必须至少有一个运算符。 据我所知,这个错误意味着$set:{“tasks.$.Task”:oTask}它没有正确指向


我也尝试过:$set:{“cards.tasks.$.Task”:oTask},$set:{“cards.tasks:$.tasks”:oTask}

这不是一个经过测试的理论,但您的模式可能没有正确定义。在定义
Task
之前,您在
Card
模式中使用
Task
,在定义
Card
之前,在
ProjectSchema
中使用
Card
。SimpleSchema在解析查询时可能会忽略某些属性,因为路径实际上并不存在。哦,很抱歉,它在我的代码中的顺序是正确的,为了可读性,我只是按顺序粘贴了它,我会修复它。您只能返回“外部”数组的匹配索引,因此,寻找匹配“内部”数组的位置是不可能的。在操作员的指导下,记录良好。理想情况下,不要“嵌套”数组,最多将结构展平为单个数组条目。谢谢,我在文档中读到了这一点,但没有发现这意味着我根本无法搜索更深的数组。我会试着把任务放在第一层。这不是一个经过测试的理论,但是你的模式可能没有正确定义。在定义
Task
之前,您在
Card
模式中使用
Task
,在定义
Card
之前,在
ProjectSchema
中使用
Card
。SimpleSchema在解析查询时可能会忽略某些属性,因为路径实际上并不存在。哦,很抱歉,它在我的代码中的顺序是正确的,为了可读性,我只是按顺序粘贴了它,我会修复它。您只能返回“外部”数组的匹配索引,因此,寻找匹配“内部”数组的位置是不可能的。在操作员的指导下,记录良好。理想情况下,不要“嵌套”数组,最多将结构展平为单个数组条目。谢谢,我在文档中读到了这一点,但没有发现这意味着我根本无法搜索更深的数组。我将尝试将任务放在第一级。