【发布时间】:2016-06-22 15:15:27
【问题描述】:
我创建了一个额外的集合,用作我的应用程序欢迎屏幕的数据缓存。每小时我都会对我的正常集合运行一组聚合查询,并创建一个新的欢迎屏幕数据对象,我将其添加到我的welcomeScreenData 集合中,并且我的应用程序的欢迎屏幕上只使用该集合中的最新文档。
当我在我的应用程序中使用猫鼬时,我为此缓存集合创建了一个空模式:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var welcomeScreenDataSchema = new Schema({}, { strict : false });
var WelcomeScreenData = mongoose.model('WelcomeScreenData', welcomeScreenDataSchema, 'welcomeScreenData');
module.exports = WelcomeScreenData;
我的查询结果保存到 WelcomeScreenData 对象:
var welcomeScreenData = new WelcomeScreenData({
featured : results[0],
popular : results[1],
new : results[2]
});
console.log(welcomeScreenData);
welcomeScreenData.save(function(error, welcomeScreenData){
if(error){
callback(error);
}else{
callback();
}
});
当我注销我要保存的对象时,它包含三个数组(特色、流行和新),每个数组都是对象数组。
保存后,数据库包含相同的三个数组,但“featured”数组只包含objectIds,而不是完整的对象。我认为使用strict : false 意味着在任何情况下都应该保存整个对象。在这种情况下,什么可能导致整个对象无法保存?
我获取“特色”数组数据的唯一区别是它们来自deep populate 查询的填充部分,但在保存时不只是javascript对象吗?
【问题讨论】: