Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';t访问Mongoose响应的对象属性_Node.js_Mongodb_Asynchronous_Mongoose - Fatal编程技术网

Node.js Can';t访问Mongoose响应的对象属性

Node.js Can';t访问Mongoose响应的对象属性,node.js,mongodb,asynchronous,mongoose,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:

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

我怎样才能做到这一点?我遗漏了什么?

当涉及到访问模型属性时,Mongoose做了一些古怪的事情。当您遇到问题时,最好使用
.lean()
作为查询的一部分,或者在输出上调用
.toObject()
,将模型转换为普通JS对象

e、 g.使用
.toObject()

e、 g.使用
lean()


我怀疑您试图获取的值不在
模式中,而是存储在数据库中

你有两个解决方案。您可以将
entity\u id
添加到您的
Schema
中,Mongo将能够将其绑定到您收到的
文档
对象。这是推荐的方法

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

Partipant.find({entity_id: 0})
上面的find()返回数据库中的文档数组

您可以访问每个记录的值

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

您是否尝试过使用
toObject()
var particients=docs.map(函数(doc){return doc.toObject().user_id;}那样展平结果
或返回普通JS对象的方法?问题是mongoose不会返回数据库中的对象,而是返回包装在mongoose对象中的对象。正确的解决方案是将属性添加到架构中,Masadow的旁路是一种功能替代方法。感谢您的回答,它帮助了我。但是对于
\u id
,我如何访问它,它不在我的模式中,它返回Unfind?是的!这它不在模式中。因此,它显示在对象的完整打印上,但不是在使用键时!非常感谢。
Partipant.find({entity_id: 0})
docs.map((d)=>{
    console.log(d.get('user_id'))
})