获取文档(如果存在)并插入它们,然后在Mongoose中返回插入文档



我的MongoDB数据库["student1", "student2", "student3"]中有一个学生列表,如下所示,我正在尝试运行一个查询,其中我有另一个列表["student5", "student2", "student7"]。鉴于我已经有了"student2",我不想更新它。我只想插入student5", and "student7"。插入后,我想返回所有学生的文档["student5", "student2", "student7"]。使用Mongoose可以做到这一点吗?模式如下所示:

const studentSchema = new mongoose.Schema({
email: {
type: String,
require: [true, 'Please provide an Email!'],
unique: [true, 'Email already exists'],
},
password: {
type: String,
require: [true, 'Please provide a Password!'],
unique: false,
},
name: {
type: String,
require: [true, 'Please provide a name!'],
unique: false,
},
residency: {
type: String,
require: false,
unique: false,
},

gpa: {
type: number,
require: false,
unique: false,
},
});

在我的数据库中,我有以下学生

{
_id:######,
name: "student1",
email: "email",
password:"password",
residency:null,
gpa: 3.9,
},
{
_id:####,
name: "student2",
email: "email",
password:"password",
residency:null,
gpa: 2.5,
},
{
_id:##########,
name: "student3",
email: "email",
password:"password",
residency:null,
gpa: 3.4,
}

我运行的查询

db.students.updateOne({ name: { $in: ["student2", "student5", "student7"]}, { $addToSet: { students: { $each: [{
name: "student2",
email: "email",
password:"password",
residency:"class 1",
gpa: 3.9,
},{
name: "student5",
email: "email",
password:"password",
residency:"class 13",
gpa: 3.00,
},{
name: "student7",
email: "email",
password:"password",
residency:"class 10",
gpa: 2.00,
}]}}}, {new: true})

如果你想插入许多文档而不覆盖现有的文档,你需要指定唯一的密钥索引(在你的情况下,我猜是name(,然后用ordered: false参数执行insertMany操作并捕获重复密钥异常。您可以在此处阅读有关无序插入的信息:https://www.mongodb.com/docs/manual/reference/method/db.collection.insertMany/#unordered-插入

try {
db.students.insertMany([{
name: "student2",
email: "email",
password: "password",
residency: "class 1",
gpa: 3.9,
}, {
name: "student5",
email: "email",
password: "password",
residency: "class 13",
gpa: 3.00,
}, {
name: "student7",
email: "email",
password: "password",
residency: "class 10",
gpa: 2.00,
}], { ordered: false })
} catch (err) { //treat the err }

最新更新