我正在为需要存储一些偏好的应用程序编写后端。
我正在使用MEAN堆栈,因此后端是express + mongodb。我正在使用猫鼬。
数据库必须具有唯一的首选项文档,该文档在服务器启动时存在且只能更新。不应该覆盖此文档(如果我已经在db中创建了文档,则重新启动服务器:不要删除/修改它)。 但我无法弄清楚如何只保存一次唯一(默认)文档。它永远不会进入pre。(“save”)回调。
我做到了这一点:
var mongoose = require('mongoose'), Schema = mongoose.Schema;
var preferencesSchema = new Schema({
/* preference schema */
});
var Preferences = mongoose.model('Preferences', preferencesSchema);
var default_prefs = new Preferences({
/* default entry */
});
preferencesSchema.pre('save', function(next) {
var self = this;
/** NEVER GETS HERE **/
Preferences.find({}, function(err, pref_documents) {
if (pref_documents.length > 0) {
console.log("Skiping save because a preference already exists !");
next();
} else {
console.log("Not skiping !!");
next();
}
});
});
default_prefs.save(function(err, preferences) {
if (err)
console.log('error saving !!');
else
console.log("Saved Preferences: " + preferences);
});