猫鼬Node.JS错误无法创建字段

时间:2020-05-28 10:51:40

标签: javascript node.js mongodb mongoose

我正在尝试更新集合中的元素。它是一个二维数组。我尝试直接修改它,尝试更新整个数组结构,并尝试使用set方法。没有什么能给我成功。

这是我的模特:

var nestedInside = mongoose.Schema({
    x: Number,
    y: Number,
    block: {
        type: Boolean,
        default: false
    }, 
    answer: String,
    question: String,
    questionnr: Number,
    vertical: Boolean,
    questionnr2: Number,
    question2: String,
    vertical2: Boolean,
    tmp: String,
    question_vertical: String,
    question_horizontal: String,
    question_num: Number
})

var schema = mongoose.Schema({
    grid: [[nestedInside]]
})

var create = mongoose.model('puzzles', schema);

这是我执行以下代码时的错误:

puzzle.findOne({_id:req.params.id}).exec(function(err,data) {
   var grid = data.grid;
   grid[req.body.xo].id(req.body._id)["question_vertical"] = req.body.question_vertical
   data.save();
errorMongoError: Cannot create field 'question_vertical' in element {0: [ { block: false, _id: ObjectId('5dec2f1dde95855cf9130f50')...

当我尝试替换整个数组时,它说:强制转换为值失败

有人知道吗?我没有选择,我知道。

样本数据:


   "_id":{
      "$oid":"5da1097076a05f2c50f34001"
   },
   "free":false,
   "package":{
      "$numberInt":"6"
   },
   "grid":[
      [
         {
            "block":false,
            "_id":{
               "$oid":"5da1097076a05f2c50f34008"
            },
            "x":{
               "$numberInt":"1"
            },
            "y":{
               "$numberInt":"1"
            },
            "answer":"G",
            "question_num":{
               "$numberInt":"1"
            },
            "question_vertical":"Abk.: Grundgesetz",
            "question_horizontal":"kostenlos"
         },
    ....
       ]
    ],
    ....

2 个答案:

答案 0 :(得分:0)

您说过更新了阵列结构。您是否从数据库中删除了旧项目(甚至更好地删除了当前数据库)?否则,这可能导致错误的文档解析(Mongoose - Redefining schema structure)。

答案 1 :(得分:0)

好吧,我想出了一个解决方案,或者说是一种解决方法。

我克隆了整个文档,删除了旧的文档,然后再次保存了克隆的文档。这很好。只适合可能遇到相同问题的人。