我正在尝试将一组对象推送到文档中。我使用$ addToSet尝试不插入重复数据。我想检查一下applied.studentId。但是如果我两次传递相同的请求,那么数据就会被插入。是否有我必须使用的$ addToSet和$的检查?
我的架构如下
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"});
}
})
});
}
答案 0 :(得分:1)
在禁用日期字段时,$ addToSet不会添加重复值。根据文档https://docs.mongodb.com/manual/reference/operator/update/addToSet/
因此,字段顺序很重要,您无法指定MongoDB仅比较文档中字段的子集来确定文档是否与现有数组元素重复。
答案 1 :(得分:0)
一个选项是将应用移到单独的集合中,并使Job模式引用为新的应用模型。
示例:
{
jobId: { type: Number },
hiringCompanyId: String,
applied: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Applied'
}]
}