猫鼬更新嵌套文档的字段不起作用

时间:2019-06-05 06:15:08

标签: node.js mongodb mongoose

我尝试使用猫鼬更新嵌套子文档的字段。
这是模型和源代码。
型号

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var info_schema = mongoose.schema({
   info:Schema.Types.Mixed,
},{collection:'info'});
var InfoModel = mongoose.model('info', info_schema);

我尝试在mongoshell中执行db.info.updateMany({'info.addition.group':myid},{$set:{'info.addition.field1':'a','info.addition.field2':'b'}})
它工作得很好,但不能使用猫鼬。

 InfoModel.updateMany({'info.addition.group':myid},{$set:{'info.addition.field1':'a','info.addition.field2':'b'}}).exec();    

为什么猫鼬不更新子嵌套文档的字段?
因此,我尝试更详细地描述模型。

 var info_schema = mongoose.schema({
   info:{
      addition:Schema.Types.Mixed,
      otherinfo:String,
      modified:Number,
      ....
    },
 },{collection:'info'});

这时,猫鼬抛出了错误。

  

CastError:在路径“加法”处将值“ a”的数字转换为数字失败

我做错了什么?
这是什么原因呢?

1 个答案:

答案 0 :(得分:0)

这可以使用您的代码并对其进行一些修改:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var info_schema = new Schema({  // <-- just use Schema
   info: Schema.Types.Mixed
},{collection:'info'});
var InfoModel = mongoose.model('info', info_schema);

InfoModel.updateMany({'info.addition.group': 1},  // <-- I used 1 for testing
{ $set: { 'info.addition.field1' : 'a', 'info.addition.field2' : 'b' } }).exec()

首先创建info.addition.id == 1的记录后进行本地测试,以便我可以对其进行更新等。