Node.js mongoose使用$addToSet和$each将重复项插入数组中
我试图将一组对象推送到文档中。我正在使用$addToSet尝试不插入重复数据。我想检查一下applied.studentId。但是如果我两次传递相同的请求,那么数据就会被插入。我是否必须使用$addToSet和$each的支票 我的模式如下Node.js mongoose使用$addToSet和$each将重复项插入数组中,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图将一组对象推送到文档中。我正在使用$addToSet尝试不插入重复数据。我想检查一下applied.studentId。但是如果我两次传递相同的请求,那么数据就会被插入。我是否必须使用$addToSet和$each的支票 我的模式如下 jobId: { type: Number}, hiringCompanyId: String, applied: [{ studentId: String, firstName:String, last
jobId: { type: Number},
hiringCompanyId: String,
applied: [{
studentId: String,
firstName:String,
lastName:String,
gender:String,
identityType:String,
identityValue:String,
email:String,
phone:String,
}],
我的节点代码如下
public ApplyForJob(data: JobDto): Promise<{ status: string }> {
let students = data.applied;
let findQuery = {hiringCompanyId: data.hiringCompanyId, jobId: data.companyJobId};
let appliedQuery = {};
if (!isNullOrUndefined(data.applied.length)) {
appliedQuery = {
"$addToSet": {
"applied": {
"$each": data.applied
}
}
};
}
return new Promise((resolve, reject) => {
Jobs.findOneAndUpdate(findQuery, appliedQuery).exec((err, info) => {
if (err) {
reject(new UpdateError('Jobs - Update()', err, Jobs.collection.collectionName));
} else {
console.log(info);
resolve({status: "Success"});
}
})
});
}
禁用日期字段时,$addToSet不会添加重复的值。根据文件
因此,字段顺序很重要,您不能指定MongoDB只比较文档中字段的子集来确定文档是否是现有数组元素的副本。正如Rahul Ganguly绝对正确地提到的,我们无法可靠地将$addToSet用于JS对象 一个选项是将应用程序移入单独的集合,并使作业模式引用新的应用程序模型 例如:
{
jobId: { type: Number },
hiringCompanyId: String,
applied: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Applied'
}]
}
我甚至在schemaOK中设置了_id:false,因此禁用日期字段$addToSet是有效的。在执行addToSet检查时是否有禁用字段的选项?mongoose 4.11.11和Mongo3.4.2