#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 populater возвращает null?
Я думал, что заполнение было присоединением, но заполнение не дает данных идентификатора пользователя.
Я не понимаю, когда я впервые изучаю nosql.
Можете ли вы сказать мне, где я поступил неправильно?
Комментарии:
1. Правильно ли вы сохраняете идентификатор пользователя?
2. да. у моего robo3T данные хранятся нормально.
3. В документации mongoosejs.com/docs/populate.html#saving-refs
userId
они должны быть объявлены как_id: new mongoose.Types.ObjectId(),
4. БОЖЕ мой!!! спасибо тебе, Гиргетто!!! Первоначально я пытался использовать _id, переименовав его, но это не сработало, поэтому я объявил boardId и userId. Я не знал, что это заставляло населять чувствовать себя плохо. Большое спасибо.
Ответ №1:
Я тоже пишу ответ здесь:
В документации https://mongoosejs.com/docs/populate.html#saving-refs userId
они должны быть объявлены как _id: new mongoose.Types.ObjectId()