其他模式中的引用-猫鼬

时间:2020-06-07 16:20:38

标签: node.js json mongoose

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

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

1 个答案:

答案 0 :(得分:0)

关于populate,您应该提供postSchema中提供的字段名称。因此应将.populate('User')替换为.populate('author')

由于post需要author _id,因此,只有在post成功保存之后,才应保存author

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();
  }
});