簡體   English   中英

Mongoose mixed Type object數組,可以找到OneAndUpdate

[英]Mongoose mixed Type object array, can findOneAndUpdate

我有一張 controller 編輯卡,它更新了 cardsArray object 的字段。cardsArray 是混合類型 object,因為每張卡的文件 object 是不同的,所以我正在存儲 mixed.type 雖然使用 addCard controller 推送新卡可以完美地工作但是當 edit498 被稱為 4398 卡時,4182995402888 是不同的,它給出類型錯誤當調用編輯控制器時給出以下錯誤:TypeError:無法讀取 null 的屬性(讀取'cardsArray')

    // Schema
     const userSchema = new mongoose.Schema(
              {
                name: {
                  type: String,
                  required: true,
                },
                email: {
                  type: String,
                  required: true,
                },
                password: {
                  type: String,
                  required: true,
                },
            
                cardsArray: [{ type: mongoose.Schema.Types.Mixed }],
              }


        
        

);

    //__Mongodb Data
    
        {
          "_id": {
            "$oid": "63b43ab32fc8d3c100cafecc"
          },
          "name": "usern_name",
          "email": "pr****@gmail.com",
          "password": "$2b$12$3nwifHakrBu94BwLXAC4Nu16Kw0.xyW8vAIPTMSgY7cYttVklDIZq",
          "cardsArray": [
            {
              "title": "some_title",
              "category": "Bank",
              "cardHolder": "some_name",
              "cardNumber": "54545454",
              "expiry": "23/01",
              "cvv": "***",
              "logoIndex": 72,
              "isFavourite": false,
              "_id": {
                "$oid": "63b83cc77288d277ef359533"
              }
            }
          ],
          
          "loginIdsArray": [],
          "docsArray": [],
          "activitiesArray": [],
          "__v": 0
        }
    
    
    // Add Card Controller.js___
    
         addCard: async (req, res) => {
            console.log(req.body.data, req.body.user_id)
            // console.log('obj_id', newObjectId)
            req.body.data._id = newObjectId;
            try {
        
              const response = await UserDatabase.findOneAndUpdate(
                { _id: req.body.user_id },
                {
                  $push: {
                    // cardsArray: req.body.data,
                    cardsArray: { $each: [req.body.data] },
                  },
                },
                { returnOriginal: false }
              );
              res.status(200).send(response);
            } catch (error) {
              console.log(error)
              res.status(404).json({ message: error.message });
            }
          },
        
    // edit card controller.js 
 
editCard: async (req, res) => {
  const id = req.params.id;

  const { category, title, cardHolder, cardNumber, expiry, cvv, logoIndex, isFavourite } = req.body;
  console.log(req.params.id)

  try {
 

    const response = await UserDatabase.findOneAndUpdate(
      { _id: "63b43ab32fc8d3c100cafecc", 'cardsArray._id': "63b709fc69a1cfa6fccd645c" },
      {
        $set: {
          "cardsArray.$.title": req.body.title,
          "cardsArray.$.category": req.body.category,
          "cardsArray.$.cardHolder": req.body.cardHolder,
          "cardsArray.$.cardNumber": req.body.cardNumber,
          "cardsArray.$.expiry": req.body.expiry,
          "cardsArray.$.cvv": req.body.cvv,
          "cardsArray.$.logoIndex": req.body.logoIndex,
          "cardsArray.$.isFavourite": req.body.isFavourite
        }
      },
    );

    console.log(response)
    res.status(201).json(response.cardsArray);
  } catch (error) {
    console.log(error)
    res.status(404).json({ message: error.message });
  }
}
  

這意味着沒有數據匹配以下 _id 和 cardsArray._id 我認為它無法找到 feild 'cardsArray._id',首先嘗試通過 findOne 找到值

await UserDatabase.findOneAndUpdate(
  { _id: "63b43ab32fc8d3c100cafecc", 'cardsArray._id': "63b709fc69a1cfa6fccd645c" })

如果你的發現不起作用嘗試下面的方法不確定但它可能工作你必須找到 id 並循環使用 $in 或 $match 的 cardsArray

 await UserDatabase.findOneAndUpdate(
  { _id: "63b43ab32fc8d3c100cafecc", 'cardsArray':{$in:[ {_id:"63b709fc69a1cfa6fccd645c" }]})

暫無
暫無

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

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