gpt4 book ai didi

javascript - 将默认值设置为 Node js中的mongoose数组

转载 作者:可可西里 更新时间:2023-11-01 09:20:19 28 4
gpt4 key购买 nike

在我的模型定义中,我有:

appFeatures: [{
name: String,
param : [{
name : String,
value : String
}]
}]

我想为 appFeatures 设置默认值,例如:名称:'功能',参数:[{name:'param1',value:'1'},{name:'param2',value:'2'}]

我试过了

appFeatures : { type : Array , "default" : ... }

但是它不起作用,有什么想法吗?

谢谢

最佳答案

Mongoose 允许您“分离”模式定义。两者都是为了一般的“重用”和代码的清晰度。因此,更好的方法是:

// general imports
var mongoose = require('mongoose'),
Schema = mongoose.Schema;

// schema for params
var paramSchema = new Schema({
"name": { "type": String, "default": "something" },
"value": { "type": String, "default": "something" }
});

// schema for features
var featureSchema = new Schema({
"name": { "type": String, "default": "something" }
"params": [paramSchema]
});

var appSchema = new Schema({
"appFeatures": [featureSchema]
});

// Export something - or whatever you like
module.export.App = mongoose.model( "App", appSchema );

因此,如果您愿意将“Schema”定义作为单个模块的一部分并使用“require”系统根据需要导入,那么它就是“干净的”和“可重用的”。如果您不想“模块化”所有内容,您甚至可以从“模型”对象“内省(introspection)”模式定义。

但大多数情况下,它允许您为默认值明确指定“您想要什么”。

对于更复杂的默认设置,您可能希望改为在“预保存” Hook 中执行此操作。作为一个更完整的例子:

var async = require('async'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;

var paramSchema = new Schema({
"name": { "type": String, "default": "something" },
"value": { "type": String, "default": "something" }
});

var featureSchema = new Schema({
"name": { "type": String, "default": "something" },
"params": [paramSchema]
});

var appSchema = new Schema({
"appFeatures": [featureSchema]
});

appSchema.pre("save",function(next) {
if ( !this.appFeatures || this.appFeatures.length == 0 ) {
this.appFeatures = [];
this.appFeatures.push({
"name": "something",
"params": []
})
}

this.appFeatures.forEach(function(feature) {
if ( !feature.params || feature.params.length == 0 ) {
feature.params = [];
feature.params.push(
{ "name": "a", "value": "A" },
{ "name": "b", "value": "B" }
);
}
});
next();
});


var App = mongoose.model( 'App', appSchema );

mongoose.connect('mongodb://localhost/test');


async.series(
[
function(callback) {
App.remove({},function(err,res) {
if (err) throw err;
callback(err,res);
});
},
function(callback) {
var app = new App();
app.save(function(err,doc) {
if (err) throw err;
console.log(
JSON.stringify( doc, undefined, 4 )
);
callback()
});
},
function(callback) {
App.find({},function(err,docs) {
if (err) throw err;
console.log(
JSON.stringify( docs, undefined, 4 )
);
callback();
});
}
],
function(err) {
if (err) throw err;
console.log("done");
mongoose.disconnect();
}
);

您可以清理它并内省(introspection)架构路径以获取其他级别的默认值。但是您基本上想说,如果未定义该内部数组,那么您将按照编码填写默认值。

关于javascript - 将默认值设置为 Node js中的mongoose数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26861417/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com