【问题标题】:References in another Schema - mongoose另一个 Schema 中的引用 - mongoose
【发布时间】:2020-09-26 14:27:58
【问题描述】:

我正在为一个新项目使用 MongoDB 和 NodeJS 进行一些测试。 搜索文档我发现可以引用其他集合并将此数据带到 JSON。

那时我决定进行以下测试:

const mongoose = require('mongoose')
const Schema = mongoose.Schema

    const userSchema = new Schema({
      name: {
        type: String,
        required: true,
        unique: true
      },
      email: {
        type: String,
        required: true,
        unique: true,
      },
      posts: [{
        type: Schema.Types.ObjectId,
        ref: 'Post'
      }]
    })
    const userModel = mongoose.model('User', userSchema)

    const postSchema = new Schema({
      title: {
        type: String
      },
      content: {
        type: String
      },
      author: {
        type: Schema.Types.ObjectId,
        ref: 'User'
      }
    })
    const postModel = mongoose.model('Post', postSchema)

    const saveUser = new userModel({
      name: 'user',
      email: 'user@email.com'
    })
    saveUser.save()

    const savePost = new postModel({
      title: 'Lorem',
      content: 'Lorem Ipsum',
      author: saveUser._id
    })
    savePost.save()


    postModel.find()
      .populate('User')
      .exec((err, post) => {
        console.log(post)
      })

但是 JSON 的返回是:

    {
      _id: 5edd0c24a4f42b0e126f4b15,
      title: 'Lorem',
      content: 'Lorem Ipsum',
      author: 5edd0c24a4f42b0e126f4b14,
      __v: 0
     }

应该是什么时候:

    {
      _id: 5edd0c24a4f42b0e126f4b15,
      title: 'Lorem',
      content: 'Lorem Ipsum',
      author: {
        _id: 5edd0c24a4f42b0e126f4b14,
        name: user,
        email: user@email.com
      },
      __v: 0
    }

有谁知道这个问题的任何解决方案,我可以在其中插入我所有的新架构?

【问题讨论】:

  • 如果我注释掉 .populate ('User') 行,它会返回第一个 JSON

标签: node.js json mongoose


【解决方案1】:

关于populate,您应该提供postSchema 中提供的字段名称。所以应该用.populate('author')替换.populate('User')。

由于post 需要author _id,您应该仅在成功保存author 后保存post

const saveUser = new userModel({
  name: "user",
  email: "user@email.com",
});
saveUser.save((err, data) => {
  if (err) console.log(err);
  else {
    const savePost = new postModel({
      title: "Lorem",
      content: "Lorem Ipsum",
      author: saveUser._id,
    });
    savePost.save();
  }
});

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 2021-03-27
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多