使用mongoose動態的更新限定長度的數組,確保mongodb集合保存最新數據。


首先,這是我的博客處子秀,希望各位多多指點。

針對動態的更新mongoose中Schema內嵌數組,我的總結如下:

  有些時候我們實際上並不需要數組的全部元素,特別是針對及時推送類的信息,我們僅僅需要展示最近時間的部分數據,所以完全沒有必要將所有的數據存入Mongodb數據庫中,代碼(已驗證無問題)及問題詳細描述如下:

var mongoose = require("mongoose");

var Schema = mongoose.Schema;

var arraySchema = new Schema({

  name: String

});

var objSchema = new Schema({

  user: String,

  array: [arraySchema]

});

現在我們需要針對objSchema中的array進行相關操作,只想在array數組中存儲最新的10條數據,小於10條時全部存儲,大於10條時將最新的數據寫入Mongodb,將舊的數據刪除,保持數組索引以及數組長度不發生變化。

var arrayInfoModel = mongoose.model("arrayInfo", arraySchema);

var arrayInfo = function(){};

arrayInfo.prototype.createTenArray = function(userName, arraySchemaObj, callback){

  arrayInfoModel.findOne({user: userName}, function(err, res){

    if(err){

      console.log(err);

    }else{

      res.array.push(arraySchemaObj);

      if(res.array.length > 10){

        for(var i = res.array.length - 10; i > 0; i--){

          res.array.shift();

        }

      } 

      res.save(callback);

    }

  });

};

上段代碼就是我們實現的主要邏輯,熟悉JavaScript中原型繼承的同學很容易就可以通過:

module.exports = new arrayInfo();

這句代碼即可將arrayInfo中的createTenArray方法暴露給外界用戶隨意使用,當然通require當前模塊來使用。關於require和module.exports的參考資料網上有很多。

寫到這里,我會繼續努力,希望能夠幫到有需要的人!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM