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

时间:2015-09-17 14:57:10

标签: node.js mongodb asynchronous mongoose

我在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)
});

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

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

我不明白为什么。

我需要执行类似

的操作
var participants = docs.map(function(d){return d.user_id})

我怎样才能实现这一目标?我错过了什么?

3 个答案:

答案 0 :(得分:10)

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

e.g。使用.toObject()

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

e.g。使用lean()

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

答案 1 :(得分:9)

我怀疑您尝试获取的价值不在您的Schema中,而是存储在您的数据库中。

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

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

答案 2 :(得分:0)

Partipant.find({entity_id: 0})

上面的find()返回数据库中的文档数组

您可以访问每个记录的值

docs.map((d)=>{
    console.log(d.get('user_id'))
})