我在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})
我怎样才能实现这一目标?我错过了什么?
答案 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'))
})