我尝试使用猫鼬更新嵌套子文档的字段。
这是模型和源代码。
型号
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”的数字转换为数字失败
我做错了什么?
这是什么原因呢?
答案 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的记录后进行本地测试,以便我可以对其进行更新等。