node.js - how to make mongodb 'upsert' to insert new documents as well as update existing ones -


in mean app, have situation, i'm reading in csv data line line, , using 'upsert' update existing records, insert those, not match 'cscopportunityid' field value:

if(metafields.subjectcategory === 'salesforcedata'){                             //here use upsert logic either insert new, or update existing records                              (var = 0; < result.length; i++) {                                 //console.log(result[i]);                                  var inserted = 0;                                  (var = 0; < result.length; i++) {                                     var datarecord = result[i];                                      datarecord.originaldocumentname = filename;                                     datarecord.documentauthor = metafields.documentauthor;                                     datarecord.tabname = tabname;                                     datarecord.subjectcategory = metafields.subjectcategory;                                     datarecord.subject = metafields.subject;                                     datarecord.datedocumentproduced = metafields.datedocumentproduced;                                     datarecord.datedocumentreceived = metafields.datedocumentreceived;                                     datarecord.documentsubmitter = metafields.documentsubmitter;                                     datarecord.documentreviewer = metafields.documentreviewer;                                     datarecord.originalsource = metadatafields.originalsource,                                         datarecord.dataversion = metadatafields.dataversion,                                         datarecord.datafields = newcsvlines[0];                                      collection.update(                                     {                                         cscopportunityid: datarecord.cscopportunityid                                     },                                         {                                             $set: {                                                  originaldocumentname:   datarecord.originaldocumentname,                                                 documentauthor: datarecord.documentauthor,                                                 tabname:    datarecord.tabname,                                                 subjectcategory:    datarecord.subjectcategory,                                                 subject:    datarecord.subject,                                                 datedocumentproduced:   datarecord.datedocumentproduced,                                                 datedocumentreceived:   datarecord.datedocumentreceived,                                                 documentsubmitter:  datarecord.documentsubmitter,                                                 documentreviewer:   datarecord.documentreviewer,                                                 originalsource: datarecord.originalsource,                                                 dataversion:    datarecord.dataversion,                                                 datafields: datarecord.datafields,                                                  cscopportunityid : datarecord.cscopportunityid,                                                 opportunityname: datarecord.opportunityname ,                                                 accountname : datarecord.accountname,                                                 opportunityowner : datarecord.opportunityowner,                                                 stage : datarecord.stage,                                                 industry : datarecord.industry,                                                 acv : datarecord.acv,                                                 revenuestartdate : datarecord.revenuestartdate,                                                 revenueterm : datarecord.revenueterm,                                                 probabilitypct : datarecord.probabilitypct,                                                 dealregion : datarecord.dealregion                                             }                                         },                                         {upsert: true},                                         {multi:true}                                          //if (++inserted == result.length) {                                         //    console.log("finished");                                         //    //db.close();                                         //}                                     );                                 }                             }                         } 

the update parts works, insert part not, because not know how make insert, when value of 'cscopportunityid' finds no match.

what proper way of handlding this?

the update method takes 4th argument callback function. since provided object {multi: true}, won't make db call, return promise. correct syntax is:

 collection.update(query, fieldstoset, {upsert: true, multi: true}, function(err,doc){   }) 

Comments