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

qncylg1j  于 2022-11-13  发布在  Go
关注(0)|答案(4)|浏览(182)

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

我怎么才能做到呢?我错过了什么?

46qrfjad

46qrfjad1#

我怀疑您试图获取的值不在您的Schema中,而是存储在您的数据库中。
你有两个解决方案。你可以把entity_id添加到你的Schema中,Mongo就可以把它绑定到你收到的Document对象上。这是推荐的方法。
或者,您可以绕过mongoose Schema,使用docs[0]._doc.entity_id访问存储在数据库中的原始文档。

nfg76nw0

nfg76nw02#

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

例如使用lean()

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

wljmcqd83#

Partipant.find({entity_id: 0})

上面的find()返回DB中的文档数组
您可以访问每个记录的值

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

p3rjfoxz4#

我也遇到了同样的问题,解决方法很简单,不用find,而是使用findOne,因为find可以返回很多结果,这就是为什么当你试图转到object的属性时,它会显示undefined.如果你使用findOne,查询肯定会有一个结果,然后你就可以使用项目名称并得到答案,例如:如果你想使用Model.find(),那么你需要访问结果中的第一个数组,然后使用它的属性,例如:对象[0]。项。

相关问题