MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment convertir la structure d'objet JSON en notation par points ?

Cela devrait être suffisamment flexible pour la plupart des besoins :

function dotNotate(obj,target,prefix) {
  target = target || {},
  prefix = prefix || "";

  Object.keys(obj).forEach(function(key) {
    if ( typeof(obj[key]) === "object" && obj[key] !== null ) {
      dotNotate(obj[key],target,prefix + key + ".");
    } else {
      return target[prefix + key] = obj[key];
    }
  });

  return target;
}

Exécuter sur votre excludesFields variable comme ceci :

dotNotate(excludeFields);

Elle renvoie la structure actuelle :

{ "Contact.Address" : 0, "Contact.Phone" : 0 }

Ainsi, vous pouvez même faire, en ligne :

things.findOne({}, {fields: dotNotate(excludeFields) })

Ou fournissez comme projection :

var projection = { "fields": {} };
dotNotate(excludeFields,projection.fields);
things.findOne({}, projection);

Fonctionne bien à toutes les profondeurs et même avec des tableaux de manière essentielle, sauf si vous avez besoin d'opérateurs comme $push .