无法访问Mongoose响应的对象属性

Hug*_*ugo 5 asynchronous mongoose mongodb node.js

我在node.js上运行此代码

var mongoose = require('mongoose');
mongoose.model('participant',new mongoose.Schema({},{ collection : 'forumParticipant' }));
var Participant = mongoose.model('participant');
mongoose.connect('******');

Participant.find({entity_id: 0}, function (err, docs) {
   console.log(docs[0]);
   console.log(docs[0].entity_id)
});
Run Code Online (Sandbox Code Playgroud)

1)第一个console.log返回完整的文档

2)第二个console.log返回未完成

我不明白为什么.

我需要做类似的事情

var participants = docs.map(function(d){return d.user_id})
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我错过了什么?

Yur*_*bin 12

在访问模型属性时,Mongoose做了一些时髦的东西.无论何时遇到问题,最好的选择是将其.lean()用作查询的一部分,或者调用.toObject()输出将模型转换为普通的JS对象.

例如使用 .toObject()

Participant.find({entity_id: 0}, function (err, docs) {
   console.log(docs[0].toObject());
   console.log(docs[0].toObject().entity_id)
});
Run Code Online (Sandbox Code Playgroud)

例如使用 lean()

Participant.find({entity_id: 0}).lean().exec(function (err, docs) {
   console.log(docs[0]);
   console.log(docs[0].entity_id)
});
Run Code Online (Sandbox Code Playgroud)


Mas*_*dow 10

我怀疑你想要获得的价值不在你的身上,Schema而是存储在你的数据库里.

你有两个解决方案.您可以添加entity_id到您的Schema,Mongo将能够将其绑定到Document您收到的对象.这是推荐的方式.

或者您可以绕过mongoose Schema并访问存储在数据库中的原始文档docs[0]._doc.entity_id.除非你知道你在做什么,否则我不推荐这个解决方案.