.populate() 返回空数组?

.populate() returning empty array?

我正在做项目,我正在尝试让用户评论显示在页面上。但是,每当我 运行 我的应用程序它 returns 一个空数组并且我不确定为什么时,我对 getReviews 函数没有任何问题,因为它 returns 一切正常,但 getUserReviews 只是 returns 一个没有错误的空数组。我尝试了多种方法,但似乎无法得到它

审核模型

    const mongoose = require("mongoose");
    
    const Review = mongoose.model(
      "Review",
      new mongoose.Schema({
        movieId: String,
        reviewId: String,
        content: String,
        sentimentScore: String,
        author: [
          {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
          }
        ],
        reponseTo: [
            {
              type: mongoose.Schema.Types.ObjectId,
              ref: "User"
            },
        ]
      })
    );
    
    module.exports = Review;

用户模型

    const mongoose = require("mongoose");
    
    const User = mongoose.model(
      "User",
      new mongoose.Schema({
        username: String,
        email: String,
        password: String,
        roles: [
          {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Role"
          }
        ]
      })
    );
    
    module.exports = User;

查看路线

    const express =  require('express');
    const router = express.Router();
    const {authJwt} = require("../middlewares");
    const Review = require("../models/review.model")
    
    router.use(function(req, res, next) {
          res.header(
            "Access-Control-Allow-Headers",
            "x-access-token, Origin, Content-Type, Accept"
          );
          next();
    });
    
    
    router.post("/addReview", [authJwt.verifyToken], (req, res) => {
        const review = new Review(req.body)
    
        review.save((err, review) => {
            if(err) return res.json({success:false, err})
            
            Review.find({'_id': review._id})
            .populate('author')
            .exec((err, result) => {
                if(err) return res.json({success: false, err})
                return res.status(200).json({success: true, result})
            })
        })
        
    })
    
    router.post("/getReviews", [authJwt.verifyToken], (req, res) => {
        Review.find({"movieId": req.body.data}) 
        // console.log("ID ", req.body.data)
        .populate('author')
        .exec((err, reviews) => {
            if(err) return res.status(400).send(err)
            res.status(200).json({success: true, reviews})
        })
        
    })

    router.post("/getUserReviews", [authJwt.verifyToken], (req, res) => {
        Review.find({"userId": req.body.data}) 
        .populate({
            path: 'author.user',
            model: 'Review'})
        .exec((err, reviews) => {
            if(err) return res.status(400).send(err)
            res.status(200).json({success: true, reviews})
        })
        
    })

您尝试使用 userId 字段查询 Review 集合,而 Review 集合没有 userId其模型定义中的字段。

也许您想查询 author 数组?在那种情况下,试试这个:

router.post("/getUserReviews", [authJwt.verifyToken], (req, res) => {
    Review.find({ author: req.body.data }) 
    .populate('author')
    .exec((err, reviews) => {
        if(err) return res.status(400).send(err)
        res.status(200).json({success: true, reviews})
    })
    
})