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

Les champs de résultat Mongoose/MongoDB apparaissent indéfinis dans Javascript

Solution

Vous pouvez appeler le toObject méthode pour accéder aux champs. Par exemple :

var itemObject = item.toObject();
console.log(itemObject.title); // "foo"

Pourquoi

Comme vous le soulignez, les vrais champs sont stockés dans le _doc champ du document .

Mais pourquoi console.log(item) => { title: "foo", content: "bar" } ?

À partir du code source de mongoose (document.js), nous pouvons constater que le toString méthode de Document appeler le toObject méthode. Donc console.log affichera les champs "correctement". Le code source est affiché ci-dessous :

var inspect = require('util').inspect;

...

/**
 * Helper for console.log
 *
 * @api public
 */
Document.prototype.inspect = function(options) {
  var isPOJO = options &&
    utils.getFunctionName(options.constructor) === 'Object';
  var opts;
  if (isPOJO) {
    opts = options;
  } else if (this.schema.options.toObject) {
    opts = clone(this.schema.options.toObject);
  } else {
    opts = {};
  }
  opts.minimize = false;
  opts.retainKeyOrder = true;
  return this.toObject(opts);
};

/**
 * Helper for console.log
 *
 * @api public
 * @method toString
 */

Document.prototype.toString = function() {
  return inspect(this.inspect());
};