猫鼬/快速填充问题

时间:2021-01-01 12:24:52

标签: node.js mongodb mongoose

我正在尝试使用用户填充记录模式,因此我可以为每条记录考虑一个用户。但是,我只得到一个空白数组。 这是我的架构:

1.记录模式:

            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');`

这是用户架构:

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

特快路线:

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

结果:


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

填充后我得到一个空白数组。我做错了什么?

1 个答案:

答案 0 :(得分:0)

对文档中的数组使用 populate 时必须指定 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)