首先,這是我的博客處子秀,希望各位多多指點。
針對動態的更新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的參考資料網上有很多。
寫到這里,我會繼續努力,希望能夠幫到有需要的人!