【问题标题】:Mongoose update the field of the nested document not working猫鼬更新嵌套文档的字段不起作用
【发布时间】:2019-06-05 14:52:07
【问题描述】:

我尝试使用 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'}})
它运行良好,但使用 mongoose 无法正常工作。

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

为什么mongoose不更新子嵌套文档的字段?
所以我试图更详细地描述这个模型。

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

此时,mongoose 抛出了错误。

CastError: 路径“addition”中值“a”的数字转换失败

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    这可以使用您的代码并稍作修改:

    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 创建记录后在本地测试,以便我可以更新它等。

    【讨论】:

    • 所以问题可能只是mongoose.schema 中的拼写错误,而不是使用mongoose.Schema 或之前声明的变量var Schema = mongoose.Schema
    • 不是 100% 我想让 OP 知道这是可行的,所以它可能就像一个错字一样简单。我什至无法使用mongoose.schema({ 运行,所以我认为 OP 会指出这一点。
    • 首先让我们确认它是new Schema 还是只是Schema,因为它应该双向工作......使用mongoose.schema 是行不通的,因为这不是一件事。
    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多