首页 > 解决方案 > Mongoose/ Express Populate issue

问题描述

I'm trying to populate the records schema with users, So i can account for a user for each record. However, i am only getting a blank array back. Here are my schemas:

1.The Records schema:

            const mongoose = require('mongoose')
           const RecordsSchema = new 
               mongoose.Schema(
                {
  
           Title: { type: String, required: true 
             },
           users:[{
          type: 
           [mongoose.Schema.Types.ObjectId],
            ref: 'users'
           }],
         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('records', 
        RecordsSchema');`

Here is the The user Schema:

         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: 'records'
       }],
      password: { type: String, required: true 
       },
       Date: { type: Date, default: Date.now, 
       immutable: true }
         });
 
        module.exports = User = 
        mongoose.model('users', 
        userSchema);

The express route:

        router.get('/all', async (req, res) => 
            {
          try {
        const records =await Records.find( 
        ).sort({Date:-1})
         .populate ('users') 
         .exec()
  

       res.json(records);
 
        } catch (err) {
        console.error(err.message);
        res.status(404).send('Server Error');
       }
       });

Result:


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

I'm getting a blank Array After populating. What am I doing wrong?

标签: node.jsmongodbmongoose

解决方案


model在对文档中的数组使用填充时,您必须指定名称。

const records = await Records.find()
                .sort({Date:-1})
                .populate('users', '', 'users) 
                .exec()

填充语法:

DocumentQuery<Document[], Document, {}>.populate(path: any, select?: any, model?: any, match?: any, options?: any)

推荐阅读