【发布时间】:2015-10-03 15:26:12
【问题描述】:
在我的 MEAN 应用程序中,我有一种情况,我正在逐行读取一些 csv 数据,并使用 'upsert' 更新现有记录,以及插入那些与 ' 不匹配的记录CSCOpportunityID' 字段值:
if(metaFields.subjectCategory === 'SalesforceData'){
//Here we will use the upsert logic to either insert new, or update existing records
for (var i = 0; i < result.length; i++) {
//console.log(result[i]);
var inserted = 0;
for (var i = 0; i < 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();
//}
);
}
}
}
更新部分有效,但插入部分无效,因为当 'CSCOpportunityID' 的值不匹配时,我不知道如何进行插入。
处理这个问题的正确方法是什么?
【问题讨论】:
-
我想知道更新是如何工作的,因为你在回调参数中放错了
{multi:true},更新只会返回一个承诺。 -
没错。您可以将其发布为答案,我会接受。
标签: node.js mongodb mean-stack