首页 > 解决方案 > mongoose.find() - 为什么嵌套数组返回为 [Object]

问题描述

在成员模式的猫鼬模型中,有一个嵌套数组。当我使用 model.find() 方法获取集合中的所有文档时,它将嵌套数组作为对象返回。因此我无法在有角的前端使用它。

请让我知道我哪里出错了。

猫鼬模型

const memberSchema = mongoose.Schema({
  aptNumber: { type:String, required: true },
  wing: String,
  floor: { type:Number, required: true },
  sqFt: { type:Number, required: true },
  owners: [{
    title: String,
    fullName: String,
    role: String,
    mobile: String,
    email: String,
  }],
});

节点路由

router.get('/', authorize(), memberCtlr.getMembers)

节点控制器

exports.getMembers = (req, res, next) => {
  let fetchedDocs;
  // memberService.getMembers()
  Member.find()
    .then(documents => {
      fetchedDocs = documents;
      console.log('Member.find(): ', fetchedDocs)   // <<<<< see below the result of this
      return Member.countDocuments();
    })
    .then(count => {
      res.status(200).json({
        members: fetchedDocs,
        totalCount: count
      });
    })
    .catch(err => {
      res.status(500).json({
        message: "Server Error in fetching Clients data!"
      });
    });
}

console.log 的结果

  {
    _id: 5ff312bfe944f205b03b19b4,
    aptNumber: '102',
    floor: 1,
    sqFt: 700,
    owners: [ [Object] ],        <<<< WHY THIS is returned as Object
    __v: 0
  }

标签: node.jsmongoose

解决方案


将 .lean() 添加到您的查询中。

前任 :

Member.find().lean()          // <<<< Add it here
    .then(documents => {
      fetchedDocs = documents;
      console.log('Member.find(): ', fetchedDocs)   // <<<<< see below the result of this
      return Member.countDocuments();
    })
    .then(count => {
      res.status(200).json({
        members: fetchedDocs,
        totalCount: count
      });
    })
    .catch(err => {
      res.status(500).json({
        message: "Server Error in fetching Clients data!"
      });
    });

推荐阅读