Mongoose:保存模型的实例会在MongoDB中创建两个条目

时间:2014-09-16 11:48:37

标签: mongodb mongoose

我的代码:

var mySchema = new Schema({
  aktuell: {N7:String, Auftragsnr:String},
  historie : [new Schema({
                date: { type: Date, default: Date.now },
                changed: {N7:String, Auftragsnr:String},
                deleted: { type: Boolean, default: false }
             }, {_id:false})]
}, { strict: false });

createIP = function(req, res) {
    var ip = new IP ({
                      aktuell:     req.body.aktuell,
                      historie:    [
                          {
                            date: nowObj, 
                            changed: req.body.aktuell
                          }
                      ]
    });

    ip.save(function(err) {
        if(err) {
            res.send({status:err});
            return;
      } else {
            res.send({ status: 'OK', ip:ip });
      }
    });
}

我希望它能在我的数据库中创建这样的条目:

{ _id: 54181fc0c5b9c1c7294ef510,
    historie: 
    [ { deleted: false,
        changed: [Object],
        date: Tue Sep 16 2014 13:32:16 GMT+0200 (CEST) 
    } ],
    aktuell: { Auftragsnr: '12', N7: '123132' } }

但除了上面的对象文字之外,还会创建一个额外的historie对象,并使用自己的ObjectId。这就是我在模型中使用{_id:false}的原因。我也根据Mongoose Docs的建议将我的阵列声明为新的Schema。我不知道,我尝试了很多。如何摆脱这个错误?

console.log(ip)显示确实有两个对象文字由mongoose传递给mongoDD,一个带有空aktuell对象,另一个带有填充对象。此外,更改的对象行为异常。这是怎么回事?

Im listening on port 9000
Connected to Database
POST - /ip/create
{ __v: 0,
  _id: 54182c3bd9d529df6085f853,
  historie: 
   [ { deleted: false,
       changed: {},
       date: Tue Sep 16 2014 14:25:31 GMT+0200 (CEST) } ],
  aktuell: {} }
IP created
POST /ip/create/ 200 25.763 ms - 128
POST - /ip/create
{ __v: 0,
  _id: 54182c3bd9d529df6085f854,
  historie: 
   [ { deleted: false,
       changed: [Object],
       date: Tue Sep 16 2014 14:25:31 GMT+0200 (CEST) } ],
  aktuell: { Auftragsnr: '14', N7: 'qweqw' } }
IP created
POST /ip/create/ 200 23.870 ms - 214

1 个答案:

答案 0 :(得分:1)

如果您不想在嵌套文档上使用id并且不想在ip对象之外访问它们,则不需要为其创建另一个架构。新模式通常表示新集合及其引用。相反,只需将其嵌套:

var IpSchema = new Schema({
    aktuell: {
        N7: { type: String },
        Auftragsnr: { type: String },
    },
    historie: [
        {
            _id: false,
            date: { type: Date, default: Date.now },
            changed: {
                N7: { type: String },
                Auftragsnr: { type: String },
            },
            deleted: { type: Boolean, default: false },
        }
    ],
});

认为这也可以解决您的问题,请告诉我。