我是否缺少允许项作为带有参数的对象登录的内容,但当我try 访问该参数时,它是未定义的?

到目前为止,我一直在try :

  • console.log(item) => { title: "foo", content: "bar" } , that's fine
  • console.log(typeof item) => object
  • console.log(item.title) => "undefined"

我将包括一些上下文,以防它与问题相关.

var TextController = function(myCollection) {
  this.myCollection = myCollection
}

TextController.prototype.list = function(req, res, next) {
  this.myCollection.find({}).exec(function(err, doc) {
    var set = new Set([])
    doc.forEach(function(item) {
      console.log(item)         // Here item shows the parameter
      console.log(item.title)   // "undefined"
      set.add(item.title)       
    })
    res.json(set.get());
  })
}

根据建议,我在这一行之前删除了debugger,以通过 node repl调试器判断实际是什么项.这就是我发现的:http://hastebin.com/qatireweni.sm

从这个开始,我试了console.log(item._doc.title)次,效果很好..所以,这看起来更像是一个mongoose 问题.

有些问题与此类似,但它们似乎与对象的"此"访问有关,或者它们试图将对象置于函数范围之外.在这种情况下,我不认为我在做这两件事,但如果我错了,请告诉我.谢谢

推荐答案

解决方案

可以调用toObject方法来访问字段.例如:

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

为什么?

正如你所指出的the real fields are stored in the 100 field of the document.

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

the source code of mongoose(document.js)中,我们可以发现Document中的toString方法调用toObject方法.所以console.log将"正确"显示字段.源代码如下所示:

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

Mongodb相关问答推荐

Go mongo-驱动程序测试,FindOne未根据给定的筛选器返回正确结果

如何在Golang保存到MongoDB时排除空数据值的问题?

如何在Mongodb Mongoose Nodejs中提取不等于一组值的字段

Tableau 与 Mongo DB Atlas by MongoDB 的连接缓存问题

多键索引,性能问题

如何在MongoDB中搜索有序子集的方法?

Golang 无法在 MongoDB 中创建文档

定期自动轮换 MongoDb 集合

根据条件删除一些数组元素并将数组的大小更新为mongo中的另一个文件

DB 中的引用对象在 GraphQL 查询中返回 null

MongoDB - 文档中多个数组大小的总和

Nestjs中不同语言数据的mongodb聚合代码

在 MongoDB 中打开连接的 SocketTimeout

返回从循环中调用的数据库查询中检索到的数据的问题

如何返回 MongoDB 中文档的 ObjectId 或 _id?和错误$in 需要一个数组

MongoDB 存储 ObjectId 的数组

如何使用 angular.js 推送通知?

使用 Spring Security + Spring 数据 + MongoDB 进行身份验证

将 MongoCursor from ->find() 转换为数组

将日期从毫秒转换为 ISODate 对象