亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Mongoose:如何更新數組中的現有元素?

Mongoose:如何更新數組中的現有元素?

鳳凰求蠱 2022-01-07 16:52:21
我想知道是否有更好的方法來更新數組中的現有元素,而不是三次獲取數據庫。如果您有任何想法,我將不勝感激。謝謝!    const creatStock = async (symbol, webApiData) => {      try {        // reversed array        const webApiDataReversed = webApiData.reverse();        const query = { symbol };        const update = { $addToSet: { data: webApiDataReversed } };        const options = { upsert: true, new: true };        // create/update Stock        const stockResult = await Stock.findOneAndUpdate(query, update, options);        const lastElement = stockResult.data.length - 1;        const updatePull = {          $pull: { data: { date: stockResult.data[lastElement].date } },        };        // removes last date from data array        await Stock.findOneAndUpdate(query, updatePull);        // update Stock        await Stock.findOneAndUpdate(query, update);      } catch (ex) {        console.log(`creatStock error: ${ex}`.red);      }    };架構const ChildSchemaData = new mongoose.Schema({  _id: false,  date: { type: mongoose.Types.Decimal128 },  open: { type: mongoose.Types.Decimal128 },  high: { type: mongoose.Types.Decimal128 },  low: { type: mongoose.Types.Decimal128 },  close: { type: mongoose.Types.Decimal128 },  volume: { type: mongoose.Types.Decimal128 },});const ParentSchemaSymbol = new mongoose.Schema({  symbol: {    type: String,    unique: true,  },  // Array of subdocuments  data: [ChildSchemaData],});module.exports.Stock = mongoose.model('Stock', ParentSchemaSymbol);輸出
查看完整描述

2 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

好吧,如果您不需要返回更新后的文檔,請嘗試這個 - 這只會返回一個寫入結果,這樣可以在一次 DB 調用中實現:


const creatStock = async (symbol, webApiData) => {

    try {

        // reversed array

        const webApiDataReversed = webApiData.reverse();

        const query = { symbol };


        await Stock.bulkWrite([

            {

                updateOne:

                {

                    "filter": query,

                    "update": { $pop: { data: 1 } }

                }

            }, {

                updateOne:

                {

                    "filter": query,

                    "update": {

                        $addToSet: {

                            data: webApiDataReversed

                        }

                    }

                }

            }

        ])

    } catch (ex) {

        console.log(`creatStock error: ${ex}`.red);

    }

};


查看完整回答
反對 回復 2022-01-07
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

你可以這樣做:


  const creatStock = async (symbol, webApiData) => {

  try {

    // reversed array

    const webApiDataReversed = webApiData.reverse();


    const query = { symbol };


    let stock =  await Stock.findOne(query);

    if(stock){

       let stockData = JSON.parse(JSON.stringify(stock.data));

       if(stockData.length>0){

          stockData.pop(); 

       }

       stockData.concat(webApiDataReversed);

       stock.data = stockData;

       await stock.save();

    }

  } catch (ex) {

      console.log(`creatStock error: ${ex}`.red);

  }


查看完整回答
反對 回復 2022-01-07
  • 2 回答
  • 0 關注
  • 387 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號