查询模型时返回未定义

时间:2019-01-21 08:53:34

标签: javascript node.js mongodb express mongoose

我想访问模型中文档数组的内容,但无法返回未定义。
这是我的模型(Project.js):

var mongoose = require('moongoose');
var Schema = mongoose.Schema;
var User = require("./Users");

var ProjectSchema = new Schema({
   name: String,
   description: String,
   owner: {
   type: mongoose.SchemaTypes.ObjectId,
      ref: "User"
   },
   contributor: [{
      type: mongoose.SchemaTypes.ObjectId,
      ref: "User"
   }]
});

module.exports = mongoose.model('Project', ProjectSchema);

和我的Api:

var Project = require('./Project')

await Project.find({owner: userId, name: name})
.then(project => {

   console.log(project);
   console.log(project.contributor);
}).catch(err => {
   res.status(500).send({
   message: err.message
   });
});

当我尝试 console.log(project); 时,返回期望的输出,但在 console.log(project.contributor)中; 返回未定义

我也在网上搜索,但找不到正确的解决方案

感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

由于您期望只找到一个项目,因此请使用findOne方法更改find​​。另一种情况是,您正在搜索多个项目,并且将收到一个数组而不是一个对象。

答案 1 :(得分:1)

您从Project.find()See)的输出将是数据库中的对象数组。

如果结果只有1个对象,则可以使用project[0].contributor,因为project是一个内部有1个对象的数组,其索引为0。

如果结果在数组中可能有很多对象,那么您应该遍历结果以分别获取每个数据。

project.forEach(p => console.log(p.contributor))