首先,这是我的博客处子秀,希望各位多多指点。
针对动态的更新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的参考资料网上有很多。
写到这里,我会继续努力,希望能够帮到有需要的人!