我在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})
我怎么才能做到呢?我错过了什么?
4条答案
按热度按时间46qrfjad1#
我怀疑您试图获取的值不在您的
Schema
中,而是存储在您的数据库中。你有两个解决方案。你可以把
entity_id
添加到你的Schema
中,Mongo就可以把它绑定到你收到的Document
对象上。这是推荐的方法。或者,您可以绕过mongoose
Schema
,使用docs[0]._doc.entity_id
访问存储在数据库中的原始文档。nfg76nw02#
Mongoose在访问模型属性时会做一些奇怪的事情。当你遇到问题时,最好的办法是使用
.lean()
作为查询的一部分,或者在输出中调用.toObject()
将模型转换为普通的JS对象。例如使用
.toObject()
例如使用
lean()
wljmcqd83#
上面的find()返回DB中的文档数组
您可以访问每个记录的值
p3rjfoxz4#
我也遇到了同样的问题,解决方法很简单,不用find,而是使用findOne,因为find可以返回很多结果,这就是为什么当你试图转到object的属性时,它会显示undefined.如果你使用findOne,查询肯定会有一个结果,然后你就可以使用项目名称并得到答案,例如:如果你想使用Model.find(),那么你需要访问结果中的第一个数组,然后使用它的属性,例如:对象[0]。项。