簡體   English   中英

貓鼬模型拒絕更新對象數組內的對象數組

[英]mongoose model refuses to update array of objects inside array of objects

我有一個商店庫存的架構。 該位置在架構中有 locationcategories 數組,在該數組中,我有 items[] 數組。

我的問題是更新 locationcategories[] 中的這個 items[]。 我使用 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 的問題,但除了幾年前的這個問題外,我找不到任何表明存在問題的內容,他在更新數組內的數組時遇到了問題。 我發現很難相信有一個問題,這么多年之后沒有人解決它,但我可能是錯的。

如果 mongo shell 正確執行並添加到 db,它會讓我相信 mongoose 模型或模式對問題負責,或者我的 updateOne() 代碼是錯誤的。

知道為什么嗎?

知道了。 所以我將 locationcategories[] 中的項目更改為 categoryItems[] 並且它有效。

.$ 運算符查找名為 items 的第一個數組,它是 items 外部,但我將數據發布到模型的第一個數組。

確保使用唯一名稱命名模型中的數組,並將 $push 指向正確的數組。

還將 mongodb 從 4.0 版升級到最新的 4.41 版。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM