Mongoose查询更新对象与嵌套数组

我有这个模式:

var controlAgenciesAndObjectsFiltersSchema = new Schema({ userId: { type: Schema.Types.Number }, controlAgencyName: { type: Schema.Types.Array, default: [] }, controlAgencyType: { type: Schema.Types.Array, default: [] }, inn: { type: Schema.Types.Array, default: [] }, ogrn: { type: Schema.Types.Array, default: [] }, licenseNumber: { type: Schema.Types.Array, default: [] }, licenseNumberRegDate: { type: Schema.Types.Array, default: [] }, street: { type: Schema.Types.Array, default: [] }, house: { type: Schema.Types.Array, default: [] }, housing: { type: Schema.Types.Array, default: [] }, building: { type: Schema.Types.Array, default: [] }, contractNumberAndDate: { type: Schema.Types.Array, default: [] }, controlStartDate: { type: Schema.Types.Array, default: [] }, controlEndDate: { type: Schema.Types.Array, default: [] }, houseType: { type: Schema.Types.Array, default: [] }, cadastralNumber: { type: Schema.Types.Array, default: [] }, constructionYear: { type: Schema.Types.Array, default: [] }, commissioningYear: { type: Schema.Types.Array, default: [] }, houseCondition: { type: Schema.Types.Array, default: [] }, houseRunOutInPercents: { type: Schema.Types.Array, default: [] }, houseSeriesAndProjectType: { type: Schema.Types.Array, default: [] }, houseTotalArea: { type: Schema.Types.Array, default: [] }, houseResidentalArea: { type: Schema.Types.Array, default: [] }, interiorWallsType: { type: Schema.Types.Array, default: [] }, energyEfficiencyClass: { type: Schema.Types.Array, default: [] }, energyInspectionDate: { type: Schema.Types.Array, default: [] }, }, { minimize: false, versionKey: false }); 

例如,我收到了我的filter新configuration对象:

 { "inn": [ { "name": "inn", "sValue1": "1", "sValue2": "", "sOperation": "Contains", "bExclude": false }, { "name": "inn", "sValue1": "2", "sValue2": "", "sOperation": "Contains", "bExclude": false } ] } 

然后执行这个function

 function updateCustomConfig (model, response, id, body) { model.findOneAndUpdate({ userId: id }, { $set: body }, function (err, doc) { if (err) { response.send({ status: "error" }); } else { response.send({ status: "success" }); } }); } 

其中id是架构中的userId,而body是这个带有“inn”数组的新的json对象。 这个查询是成功的,但以错误的方式插入的数据。 我嵌套两次数组。 我预计数据将被取代。 但它被embedded到空数组中而不是被replace掉。 错在这里: http : //www.jsoneditoronline.org/?id=251509a941acb4adfe34c8a20414b50f

使用Arraytypes而不是Schema.Types.Array

 var controlAgenciesAndObjectsFiltersSchema = new Schema({ userId: { type: Schema.Types.Number }, inn: { type : Array , "default" : [] } }); 

或创build一个inn Schema并定义它的一个数组:

 var innSchema = new Schema({ "name": String, "sValue1": String, "sValue2": String, "sOperation": String, "bExclude": Boolean }, { _id: false }); var controlAgenciesAndObjectsFiltersSchema = new Schema({ userId: { type: Schema.Types.Number }, inn: [innSchema] }); 

为什么findAndUpdate

只要尝试update 。 这对我来说工作得很好

 function updateCustomConfig (model, response, id, body) { model.update({ userId: id }, body, function (err, doc) { if (err) { response.send({ status: "error" }); } else { response.send({ status: "success" }); } }); } 

从这里了解更多