【问题标题】:POPULATION ISSUE: Mongoose/Express人口问题:猫鼬/快递
【发布时间】:2021-04-11 23:34:17
【问题描述】:

我正在尝试将每条记录附加到创建它的用户, 并且每个用户都附有他们的记录。 这是我的架构:

1.记录模式:

            const mongoose = require('mongoose')
           const RecordsSchema = new mongoose.Schema(
                {
  
           Title: { type: String, required: true },
           postedby:[{
          type: mongoose.Schema.Types.ObjectId,
            ref: 'user'
           }],
         Author: { type: String, required: true},
          ISBN: { type: String, required: true },
          Review: { type: String },
          SelectedFile: { type: String },
         Likes: { type: Number, default:0},
         Date: { type: Date, default: Date.now()}
          });

        module.exports = Records = mongoose.model('record', RecordsSchema', 'record');`

这是用户架构:

         const mongoose = require('mongoose')
         const  userSchema = new mongoose.Schema(
           {
        username: { type: String},
        email: { type: String, required: true ,unique:true},
        records:[{
        type: [mongoose.Schema.Types.ObjectId],
        ref: 'record' }],
      password: { type: String, required: true},
       Date: { type: Date, default: Date.now(), immutable: true }
         });
 
        module.exports = User = mongoose.model('user', userSchema,'user');

获取记录的快捷途径:


router.get('/postedby/', (req, res) => {

    Records.find(req.params.id)
    .populate('postedby')
    .exec()
   .then(post =>{
     if (!post) {
     return res.status(400).json({ msg: 'Add Posts' });
   }
 
  else return res.json(post);
  
  }).catch (err => console.error(err))
 
});



路线结果:


       {
       "postedby": [],
       "Likes": 0,
       "_id": "5fed8c12a4fb2c1e98ef09f6",
       "Title": "New Age",
       "Author": "Situma Prisco",
       "ISBN": "23422",
       "SelectedFile": "",
       "Review": "",
       "Date": "2020-12-31T08:30:10.321Z",
       "__v": 0
        },

我在填充的用户字段(posteddby) 上得到一个空白数组。 请帮忙,我做错了什么?是的,我确实有一个用户登录

【问题讨论】:

    标签: node.js express mongoose mongoose-schema mongoose-populate


    【解决方案1】:

    你离得太近了。

    在您的架构定义中,postedby 字段本身就是一个数组。因此,您可以简单地定义它:

    postedby:[{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'user'
      }]
    

    确保 ObjectID 正确存储在 postedby 数组中。

    此外,您正在尝试根据 ID 查找单个记录,因此您可以使用 findById(req.params.id)findOne({_id:req.params.id}) 来返回单个文档。

    【讨论】:

    • 嘿Pranesh,谢谢你的回复。但是,数组括号没有任何区别。find方法也返回相同的结果,所以最后我仍然有一个空白数组
    • @Clarasituma 请确认objectId是否正确存储在postedby数组中?
    • @PraneshAS...它是:[{"records":[],"_id":"5ff5652d4be62c4a1ce3efc5","Date":"2021-01-06T07:17:46.643Z", "用户名":"clara","电子邮件":"cnsituma@gmail.com","密码":"$2a$10$iuZXVBzRQuE3IKPKMAa380lZo6AaK5lzr9P956HSW","__v":0}]
    • @Clarasituma 这不是record 模型。您共享的是user 模型。但是postedby 字段位于record 模式中。请检查id是否存储在那里。
    • 我该怎么做?因为所有的都是一个空白数组
    猜你喜欢
    • 2021-04-12
    • 2020-10-23
    • 2019-10-27
    • 2011-08-28
    • 1970-01-01
    • 2017-11-19
    • 2015-05-14
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多