2016-02-12 47 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 .. –