Mongodb没有正确地投射数据

时间:2017-12-26 17:04:26

标签: node.js mongodb express mongoose mongoose-schema

当我在数据库上发布数据时,某些数据不会存储在我的数据库中。

这是我的模型的架构:

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 : []

更新:我会精确区分persbacklog之间的差异 Pers项是{name:String,poste}的表 backlog是{fonctionnalite:String}和{UserStory:String}的表格表

我不明白为什么这适用于pers而不适用于backlog

2 个答案:

答案 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架构和建模的更多信息,可以找到hereHeroku's Dev. blog

答案 1 :(得分:1)

似乎req.body.Fonctionnalitereq.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不变,并以fonctionnaliteuserStory作为普通数组发布的方式更新前端代码:

fonctionnalite => [ 'oijoij', 'oio' ]
userStory => [ 'oijoij','poihpohi' ]