gpt4 book ai didi

node.js - Mongoose 中 $setOnInsert 的等效解决方法是什么

转载 作者:可可西里 更新时间:2023-11-01 09:50:32 29 4
gpt4 key购买 nike

我在 mongodb 中有以下集合结构.说

集合 - 学生 - _id,firstname,lastname,class

现在我想插入 2 个额外的列,比如 marks作为array {mark1:m1,mark2:m2} when inserting a new行`。

我按照下面的方式做了,但它插入了不包括 marks 的记录值(value)观。

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

这在 Mongoose 中可能吗?

我遇到了 $setOnInsert ,但不确定这是否适合这里?

因此,如果适合,是否有任何等效的解决方法可以使用 MongoDb $setOnInsert ?如果不是,我可以使用什么方法?

最佳答案

是的,这是可能的,但这取决于定义模式时设置的选项。您不一定需要使用 $setOnInsert 运算符在插入新记录时, save() 模型上的方法就足够了。

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!!

注意:为了向后兼容,mongoose v2 中的 strict 选项默认设置为 false。将其设置为 true 并安然休眠。除非你有充分的理由,否则不要设置为 false。

关于node.js - Mongoose 中 $setOnInsert 的等效解决方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35355387/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com