2017-05-03 2 views
1

Pourquoi erreur est survenue lors

MongoError: multi update only works with $ operators

tout en utilisant bulk find and update de mettre à jour plusieurs documents.

Essayé:

var bulk = db.collection('users').initializeUnorderedBulkOp(); 

var emails = ['[email protected]', '[email protected]', '[email protected]','[email protected]']; 
var allStatus = ['s1', 's2', 's3', '']; 

for (var i =0; i< allStatus.length; i++) { 
    var query = { email: emails[i], status: { '$ne': allStatus[i] } }; 
    var updateField = {}; 
    if(allStatus[i]) { 
     updateField = { 
     $set: {status: allStatus[i], date: new Date()}, 
     $push: { 
      notes: {note: 'jdf'+i, date: new Date()}, 
      history: {status: allStatus[i], date: new Date()} 
     } 
     }; 
    } 
    bulk.find(query).update(updateField); 
} 

bulk.execute(); 

Répondre

2

Enfin j'eu ce problème et résolu ce problème

L'erreur

MongoError: multi update only works with $ operators

est produite lorsque updateField est objet vide comme updateField = {}. Lorsque j'essayais de mettre à jour un enregistrement avec objet vide alors obtenait cette erreur pour bulk mise à jour.

donc avant que le jeu de mots dans le volume vérifié que le updateField est vide ou non. mettre dans l'opération bulk sinon vide objet

comme:

if(Object.keys(updateField).length) { 
    bulk.find(query).update(updateField); 
} 

De cette manière, je résolu mon problème