使用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