当我在数据库上发布数据时,某些数据不会存储在我的数据库中。
这是我的模型的架构:
var ProjSchema = new Schema({
leadProj: String,
nomProj: String,
descProj: String,
BesProj: Number,
pers: [
{
name: String,
poste: String
}
],
backlog: { fonctionnalite: [String], userStory: [String] }
});
我使用Express for Api,这是路线
.post(function(req, res) {
var nouvProj = new NouvProj();
nouvProj.nomProj = req.body.nomProj;
nouvProj.leadProj = req.body.leadProj;
nouvProj.descProj = req.body.descProj;
nouvProj.BesProj = req.body.BesProj;
nouvProj.pers = req.body.pers;
nouvProj.backlog.fonctionnalite = req.body.Fonctionnalite;
nouvProj.backlog.userStory = req.body.UserStory;
console.log(req.body.Fonctionnalite);
console.log(req.body.UserStory);
// save the nouvProj and check for errors
nouvProj.save(function(err) {
if (err) {
res.send(err);
console.log("err");
}
res.json({
message: "nouvProj created!"
});
});
})
console.log()
[ { fonctionnalite: 'oijoij' }, { fonctionnalite: 'oio' } ]
[ { userStory: 'oijoij' }, { userStory: 'poihpohi' } ]
问题出在backlog
项目上。当我得到元素时,我得到空数据:
backlog : []
更新:我会精确区分pers
和backlog
之间的差异
Pers
项是{name:String,poste}的表
backlog
是{fonctionnalite:String}和{UserStory:String}的表格表
我不明白为什么这适用于pers
而不适用于backlog
答案 0 :(得分:1)
我认为在将functionalite
定义为array
时,只将字符串传递给nouvProj.backlog.fonctionnalite.push(req.body.Fonctionnalite);
nouvProj.backlog.userStory.push(req.body.UserStory);
,您应该将值推送到数组中,而不是为其分配字符串。
Schema.Types.Mixed
如果要定义灵活或松散的对象(无架构),在运行时指定其属性或架构字段,可以使用//schema defintion
var proj = new Proj({
myObject: Schema.Types.Mixed
});
//how use it
var proj = new Proj();
proj.myObject = { any: { fields: ['test'] } }
yourSchema.save()
backlog
如果您想将var BackLog = new Schema({
fonctionnalite: [String],
userStory: [String]
};
var ProjSchema = new Schema({
leadProj: String,
nomProj: String,
descProj: String,
BesProj: Number,
pers: [
{
name: String,
poste: String
}
],
backlog: [BackLog]
});
// create a project
var proj = new ProjSchema({
....
});
//you notice functionalite is an array, userStory is also an array
proj.backlog.push({ functionalite: ['test'], userStory: ['sss'] });
proj.save(function (err) {
...
}
定义为数组,我建议您这样做。
public partial class DatabaseEntities : DbContext
{
public DataBaseEntities() : base("name=DataBaseEntities"){}
public virtual DbSet<UserSvc> UserSvc { get; set; }
}
有关Mongoose架构和建模的更多信息,可以找到here或Heroku's Dev. blog。
答案 1 :(得分:1)
似乎req.body.Fonctionnalite
和req.body.UserStory
都是对象数组,在你的shcema中它们被声明为字符串数组,你需要重新定义ProjSchema
来接管这个行为:
var ProjSchema = new Schema({
leadProj: String,
nomProj: String,
descProj: String,
BesProj: Number,
pers: [
{
name: String,
poste: String
}
],
backlog: {
fonctionnalite: [ { fonctionnalite: String } ],
userStory: [ { userStory: String } ],
}
});
或您可以保持ProjSchema
不变,并以fonctionnalite
和userStory
作为普通数组发布的方式更新前端代码:
fonctionnalite => [ 'oijoij', 'oio' ]
userStory => [ 'oijoij','poihpohi' ]