我不知道为什么猫鼬填充器返回 null?

时间:2021-04-07 11:14:41

标签: node.js mongodb express mongoose populate

很抱歉我不会说英语。

这里有两个架构和一个查询。

/models/user_schema

const mongoose = require('mongoose');
const bcrypt = require('bcrypt');

const { Schema } = mongoose;
const userSchema = new Schema({
    userId: {
        type: mongoose.Schema.Types.ObjectId,
        unique: true,
        index: true,
        auto: true,
        required: true,
    },
    email: {
        type: String,
        required: true,
    },
    nickName: {
        type: String,
        required: true,
    },
    userName: {
        type: String,
        required: true,
    },
    password: {
        type: String,
        required: true,
    },
    profile_img: {
        type: String,
    },
    day: {
        type: Date,
        default: Date.now,
        required: true,
    },
});

/* bcrypt를 사용한 패스워드 암호화 */
userSchema.pre('save', function (next) {
    const user = this;
    const saltFactor = 10;
    bcrypt.genSalt(saltFactor, (err, salt) => {
        // Salt 생성
        if (err) {
            return next(err);
        }

        bcrypt.hash(user.password, salt, (err, hash) => {
            // Hash생성
            if (err) {
                return next(err);
            }
            user.password = hash; // Hash값 pwd에 저장
            next();
        });
    });
});

module.exports = mongoose.model('user', userSchema);

/模型/ board_schema

const mongoose = require('mongoose');

const { Schema } = mongoose;
const boardSchema = new Schema({
    boardId: {
        type: mongoose.Schema.Types.ObjectId,
        unique: true,
        index: true,
        auto: true,
        required: true,
    },
    userId: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'user',
        required: true,
    },
    contents: {
        type: String,
        required: true,
    },
    img: {
        type: String,
        required: true,
    },
    like: {
        type: Number,
        default: 0,
    },
    day: {
        type: Date,
        default: Date.now,
        required: true,
    },
});

module.exports = mongoose.model('board', boardSchema);

我的查询

const board = require('../../../models/schema/board_schema');
const user = require('../../../models/schema/user_schema');
module.exports = {
    async selectMainBoard() {
        const boardAll = await board
            .find()
            .populate('userId')
            .exec(function (err, board) {
                console.log(board);
            });

        return boardAll;
    },
};

查询返回

  {
    boardId: 606d5ed4c8bfe6118433ee83,
    like: 0,
    _id: 606d5ed4c8bfe6118433ee84,
    userId: null,
    contents: '안녕~!',
    img: 'https://99instabucket.s3.ap-northeast-2.amazonaws.com/1617780435994.JPG',
    day: 2021-04-07T07:27:16.169Z,
    __v: 0
  }

我不知道为什么 mongoose populator userId 返回 null?

我以为 populate 是 join,但 populate 没有提供 userId 数据。

第一次学习nosql的时候不明白。

你能告诉我在哪儿做错了?

1 个答案:

答案 0 :(得分:0)

我也在这里写答案:

在文档 https://mongoosejs.com/docs/populate.html#saving-refs 中,userId 应声明为 _id: new mongoose.Types.ObjectId()