sql >> Databasteknik >  >> NoSQL >> MongoDB

Resultatfält för Mongoose/MongoDB visas odefinierade i Javascript

Lösning

Du kan anropa toObject metod för att komma åt fälten. Till exempel:

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

Varför

Som du påpekar att de riktiga fälten lagras i _doc fältet i dokumentet .

Men varför console.log(item) => { title: "foo", content: "bar" } ?

Från källkoden för mongoose(document.js) kan vi se att toString metod för Document anropa toObject metod. Alltså console.log kommer att visa fält "korrekt". Källkoden visas nedan:

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());
};


  1. MongoDB -- Ange ett villkorligt uttalande i .find()

  2. Kunde inte ansluta till Redis på 127.0.0.1:6379:Anslutning nekades med hembryggning

  3. ECONNREFUSED-fel vid anslutning till mongodb från node.js

  4. Varför får felet mongod död men subsys låst och otillräckligt ledigt utrymme för journalfiler på Linux?