【问题标题】:i dont know why mongoose populater return null?我不知道为什么猫鼬填充返回null?
【发布时间】:2021-04-09 16:53:53
【问题描述】:

对不起,我不会说英语。

这里有两个模式和一个查询。

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

/models/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 populater userId 返回 null?

我以为 populate 是 join,但 populate 没有给出 userId 数据。

第一次学nosql的时候不懂。

你能告诉我我哪里做错了吗?

【问题讨论】:

  • 你是否正确保存了useId?
  • 是的。我的 robo3T 数据正常存储。
  • 在文档mongoosejs.com/docs/populate.html#saving-refs 中,userId 应声明为_id: new mongoose.Types.ObjectId(),
  • 天啊!!!谢谢你Girgetto!我最初尝试通过重命名来使用_id,但它不起作用,所以我声明了boardId和userId。我不知道这让人们感觉很糟糕。非常感谢。

标签: node.js mongodb express mongoose populate


【解决方案1】:

我也把答案写在这里:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2018-01-05
    • 2015-05-29
    • 1970-01-01
    相关资源
    最近更新 更多