2016-02-12 46 views
3

什麼是mongodb下面的集合結構。說

系列 - 學生 -_id,名字,姓氏,類

現在我要插入2個額外的列說marksarray {MARK-1:M1,MARK2:2} when inserting a new row`。

我做了如下,但它插入的記錄不包括marks值。

var student=new Student({ 
     _id:id, 
     firstname:result.fname, 
     lastname:result.lname, 
     class:result.class, 
     marks:{ 
      mark1:result.mark.m1, 
      mark2:result.mark.m2 
     } 
}) 

這是可能的貓鼬?

我碰到過$setOnInsert,但不確定這是否適合在這裏?

所以,如果它適合,是否有任何等效的解決方法使用MongoDb$setOnInsert?如果不是我可以使用什麼方法?

+0

我不確定我是否理解您的問題,但我認爲問題可能是您的貓鼬模型中沒有「標記」。 –

+0

@JorgeAranda ..是的,我沒有它,可以添加額外的列運行時間,這是不是在型號 ? –

回答

1

是的,這是可能的,但這取決於定義模式時設置的選項。您不一定需要在插入新記錄時使用運算符,模型上的方法就足夠了。

strict選項確保添加到您的模型實例中未在模式中指定的值被保存或不保存到數據庫。

例如,如果您已經定義了您的模式是這樣的:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var studentSchema = new Schema({ 
    firstname: String, 
    lastname: String, 
    class: String 
}) 

var Student = mongoose.model('Student', studentSchema); 
var student= new Student({ 
    _id: id, 
    firstname: result.fname, 
    lastname: result.lname, 
    class: result.class, 
    marks: { 
     mark1: result.mark.m1, 
     mark2: result.mark.m2 
    } 
}); 
student.save(); // marks is not saved to the db 

但是,如果你設置的strict選項設置爲false:

var studentSchema = new Schema({..}, { strict: false }); 
var student= new Student({ 
    _id: id, 
    firstname: result.fname, 
    lastname: result.lname, 
    class: result.class, 
    marks: { 
     mark1: result.mark.m1, 
     mark2: result.mark.m2 
    } 
}); 
student.save(); // marks is now saved to the db!! 

注意:本默認情況下,爲了向後兼容,strict選項在mongoose v2中設置爲false。將它設置爲真實並安然入睡。除非你有充分的理由,否則不要設置爲假。

+1

謝謝@chridam .. –