2015-10-15 62 views
1

我正在開發一個應用程序Express,NodeMongo是數據庫。我有一個集合users,和user可以有多個registered-IDs。它就像一個one-to-many的關係。我米試圖用戶採集像這樣的嵌入document表示:在現有文檔中嵌入文檔

post(function (req, res, next) { 
    var pid=req.body.pid; 
    var sid=req.body.sid; 
    var rfname=req.body.rfname; 
    var des=req.body.des; 
    var brand=req.body.brand; 
    var model=req.body.model; 
    var serial=req.body.serial; 
    var location=req.body.location; 

    var arr={pid: 'pid', sid: 'sid', rfname: 'rfname' ,des: 'des', brand: 'brand', model: 'model' ,serial: 'serial', location: 'location'}; 

    mongoose.model('User').findOne({'pemail': req.session.email}, function (err, user){ 
     if(err){ 

     } else { 
      user.registeredId = arr; 

      user.save(function(err){ 
       if(err){ 

       } else { 
        res.render('user/register', {'success': 'dfhlaksdhfh'}); 
       } 
      }) 
     } 
    }); 
} 

我的用戶的模式是這樣的:

var mongoose = require('mongoose'); 
var userSchema = new mongoose.Schema({ 
    email: String, 
    password: String, 
    fname: String, 
    lname: String, 
    plang: String, 
    slang: String, 
    country: String, 
    state: String, 
    city: String, 
    postalcode: String, 
    address1: String, 
    address2: String, 
    pemail: String, 
    semail: String, 
    age: String, 
    gender: String, 
    pphone: String, 
    sphone: String, 
    q1: String, 
    a1: String, 
    q2: String, 
    a2: String, 
    cfname: String, 
    clname: String, 
    cemail: String 
}); 
mongoose.model('User', userSchema); 

引導我,我在做什麼錯誤的,因爲它沒有嵌入文檔在現有文件中。我是否需要在架構中定義它,如果是這樣,那麼該怎麼做?

+0

您的架構中沒有定義字段「registeredId」,這就是拒絕賦值的原因。如果你想在模式中定義數組的「一對多」,當然還有'.push()',你也真的想要一個'array'。 –

回答

1

在你的模式定義,字段registeredId沒有定義,並通過該strict option默認情況下,貓鼬確保傳遞給那些沒有在我們的架構中指定你的模型構造值沒有得到保存到數據庫,因此它不會創建修改的文檔。

您可以直接在您的架構定義字段或設置嚴格的選項設置爲false在您的架構定義:

// set to false.. 
var userSchema = new Schema({..}, { strict: false }); 

,然後實現的findAndModify()方法之一,像findOneAndUpdate()更新您的通過將新對象推送到新陣列字段registeredId。因此,您可以將您的帖子功能重新編寫爲:

post(function (req, res, next) { 
    var User = mongoose.model('User'), 
     pid=req.body.pid, 
     sid=req.body.sid, 
     rfname=req.body.rfname, 
     des=req.body.des, 
     brand=req.body.brand, 
     model=req.body.model, 
     serial=req.body.serial, 
     location=req.body.location, 
     arr = { 
      'pid': pid, 
      'sid': sid, 
      'rfname': rfname, 
      'des': des, 
      'brand': brand, 
      'model': model, 
      'serial': serial, 
      'location': location 
     }, 
     condition = { 'pemail': req.session.email }, 
     update = { 
      "$push": { 'registeredId': arr } 
     }; 

    User.findOneAndUpdate(
     condition, 
     update, 
     function (err, doc){ 
      if(err){} 
      else { 
       // doc contains the modified document 
       res.render('user/register', {'success': 'dfhlaksdhfh'}); 
      } 
     } 
    ); 
});