【发布时间】: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