【问题标题】:Return undefined when query to model查询模型时返回未定义
【发布时间】:2019-01-21 08:53:34
【问题描述】:

我想访问我的模型中文档数组的内容,但我不能并返回未定义。
这是我的模型(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); 返回 undefined

我也搜索了网络,但找不到任何正确且明确的解决方案

感谢您的帮助:)

【问题讨论】:

  • 请显示console.log(project)的输出
  • project.contributor 是一个包含一个对象的数组,因此即使数组中只有一个对象,你也需要阻止你想要的一个,所以试试 console.log(project.contributor[0] )
  • project 是一个数组,而不是一个对象。因此你必须使用project[0].contributor

标签: javascript node.js mongodb express mongoose


【解决方案1】:

由于您希望只找到一个项目,因此通过 findOne 方法更改 find。其他情况下,您正在搜索多个项目并且您将收到一个数组而不是一个对象。

【讨论】:

    【解决方案2】:

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

    如果结果只有 1 个对象,则可以使用 project[0].contributor,因为 project 是一个数组,其中包含 1 个对象,位于索引 0 上。

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 2021-06-22
      • 2017-10-25
      • 2021-08-04
      • 2019-01-20
      • 2021-08-25
      相关资源
      最近更新 更多