2017-09-29 43 views
0

我試圖將一個對象數組推入文檔。我使用$ 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

我甚至設置_id:在架構 –

+0

OK,等禁用日期字段,$ addToSet作品假。有沒有任何選項可以在執行addToSet檢查時禁用字段? –

+0

貓鼬4.11.11和mongo 3.4.2 –

回答

0

as Rahul Ganguly絕對正確地提到,我們不能可靠地使用$ addToSet和JS對象。

一個選項是將應用於單獨的集合,並使作業架構引用新的應用模型。

例子:

{ 
    jobId: { type: Number }, 
    hiringCompanyId: String, 
    applied: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Applied' 
    }] 
}