猫鼬模型拒绝更新对象数组内的对象数组

时间:2020-10-05 22:56:45

标签: node.js mongodb mongoose

我有一个商店库存的架构。该位置在架构中具有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()代码是错误的。

知道为什么吗?

1 个答案:

答案 0 :(得分:0)

知道了。因此,我将locationcategories []中的项目更改为categoryItems [],它可以工作。

。$运算符查找名称为item的第一个数组,该数组位于外部,但我将数据发布到模型的第一个数组中。

确保使用唯一的名称命名模型中的数组,并将$ push指向正确的数组。

还将mongodb从版本4.0升级到最新的4.41。