我知道关于使用猫鼬联接的问题很多,但是我仍然找不到我想要的东西,因此发布了这个问题。我习惯了php / mysql,在那里我只想加入表,但是猫鼬似乎完全是另一种野兽。
我有一个产品架构和一个用户架构。
这是产品:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const productSchema = new Schema({
title: {
type: String,
required: true
},
category: {
type: String,
required: true
},
image: {
type: String,
required: true
},
description: {
type: String,
required: true
},
userId: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
address: {
city: {type: String, required: true }
},
createdAt: {
type: Date,
default: Date.now
},
});
module.exports = mongoose.model('Product', productSchema);
用户:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
firstName: {
type: String,
required: true
},
lastName: {
type: String,
required: true
},
email: {
type: String,
required: true,
index: true,
unique: true
},
contactNo: {
type: String,
required: true
},
password: {
type: String,
required: true
},
address: {
city: {type: String, required: true },
}
});
module.exports = mongoose.model('User', userSchema);
当我作为管理员用户要查看用户所添加产品的名字和姓氏(以及该产品信息)时,我将根据产品架构中的UserID“加入”“表”从用户架构中获取名字和姓氏。
我正在尝试在此处使用.populate,但不确定是否正确。
exports.getApprove = (req, res, next) => {
const productId = req.params.productId;
Product.findById(productId)
.populate('userId', 'firstName', 'lastName')
.then(product => {
res.render('account/approve', {
pageTitle: 'Approve Listing',
path: '/accounts/approve',
product: product
});
})
.catch(err => {
console.log(err);
});
};
修改:
在添加如下所示的console.log之后,它似乎给了我我想要的东西。但仍不确定我是否正确执行了此操作。
console.log(product.userId.firstName);