我有一个商店库存的架构。该位置在架构中具有locationcategories数组,并且在该数组中,我具有items []数组。
我的问题是更新locationcategories []中的此项[]。我使用mongodb shell更新数组(使用updateOne()),并且可以工作(在locationcategories []内部更新我的items []),但是当我使用mongoose模型(“ Locations”)进行更新时,它不会更新控制台,它仅显示{n:1,nModified:0,ok:1},表示已找到所有内容,但未进行任何修改。当我检查数据库时,它没有添加任何新项目。
这是我在mongoshell中使用的代码,用于更新locationcategories []中的items []
db.locations.updateOne({"locationname" :"My Town", "locationcategories":{"$elemMatch":{"categoryname": "Media"}}},{$push:{"locationcategories.$.items": {"test":"test"}}})
在我的应用程序服务器路由(expressjs)中,输入以下内容:
Location.updateOne(
{ "locationname": "My Town", "locationcategories": {"$elemMatch":{"categoryname": "Media"}}},
{$push: {"locationcategories.$.items": {"test":"test"}}},
{new : true, upsert: true },
function (error, results) {
console.log("findByIdAndUpdate results :", results);
}
);
我的猫鼬模式模型:
var Schema = mongoose.Schema;
var locationSchema = new Schema({
locationname: String,
locationdescription: String,
locationcategories: [{ categoryorder: Number, categoryname: String,
categorydescription: String, items[{itemname: String }]}],
items: [{categoryid : String, itemorder: Number, itemname: String, itemdescription: String, itemprice: Number }],
created_at: Date
});
var Location = mongoose.model('Location', locationSchema);
export default Location;
我正在使用mognodb 4.02版
Model.updateOne应该可以工作,但是没有向我的数据库添加任何内容。我阅读了许多stackoverflow.com问题,但是除了几年前的old question之外,我找不到任何表明问题的东西,他在数组内部更新数组时遇到了问题。我发现很难相信有一个问题,这些年来没有人解决过,但是我可能错了。
如果mongo shell执行并正确添加到db,它使我相信猫鼬模型或架构是造成此问题的原因,或者我的updateOne()代码是错误的。
知道为什么吗?
答案 0 :(得分:0)
知道了。因此,我将locationcategories []中的项目更改为categoryItems [],它可以工作。
。$运算符查找名称为item的第一个数组,该数组位于外部,但我将数据发布到模型的第一个数组中。
确保使用唯一的名称命名模型中的数组,并将$ push指向正确的数组。
还将mongodb从版本4.0升级到最新的4.41。