如何实际使用猫鼬.populate

时间:2019-01-04 14:24:56

标签: node.js mongoose mongoose-populate

我知道关于使用猫鼬联接的问题很多,但是我仍然找不到我想要的东西,因此发布了这个问题。我习惯了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);

0 个答案:

没有答案