2017-10-17 8 views
0

Je veux construire une fonction simple qui peut mettre à jour (upsert) un document par collection name, field key, field value, updateDataMongodb ne peut pas utiliser le paramètre comme clé de filtre de champ de mise à jour?

exemple:

function updateDB(tableName, id, rowInfo, checkfield, callback) { 
db.collection(tableName, function (err, collection) { 
    if (err) { 
     console.log(err); 
    } else { 

     console.log(checkfield); 
     collection.update({ checkfield: id }, rowInfo, { upsert: true }, function (err, objects) { 
      if (err) { 
       throw err; 
       callback(false); 
      } else { 
       // console.log(objects); 
       callback(true); 
      } 
     }); 
    } 
});} 

Cependant lorsque j'utilise le paramètre comme filtre de champ dans la requête de mise à jour, il insère toujours nouveau une des données ne mettre à jour le document. Exemple:

collection.update({ checkfield: id }..... 

Mais quand je change le filtre de champ pour realFieldName fonctionne correctement. Exemple:

collection.update({ 'realFieldName': id }.... 

Quelle est la différence entre les deux?

Répondre

0

vous devez coder comme:

var filter = {}; 
filter[checkfield] = id; 
collection.update(filter, ...); 

définissent un objet comme { checkfield: id }, checkfield est considéré comme un identifiant pas une variable.

pour plus de détails, s'il vous plaît se référer à https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

Un nom de propriété d'objet peut être une chaîne JavaScript valide ou tout ce qui peut être converti en une chaîne, y compris la chaîne vide. Toutefois, tout nom de propriété qui n'est pas un identificateur JavaScript valide (par exemple, un nom de propriété comportant un espace ou un trait d'union, ou commençant par un nombre) n'est accessible qu'avec la notation de parenthèses . Cette notation est également très utile lorsque les noms de propriété doivent être déterminées de façon dynamique (lorsque le nom de la propriété n'est pas déterminé avant l'exécution)

+0

ça fonctionne, merci! – maxyen

+0

@maxyen vous êtes les bienvenus –