首页 > 解决方案 > 如何通过猫鼬中的用户ID一次选择两个表(文档)值?

问题描述

我正在使用 NodeJs、ExpressJs 与 Mongodb 和 Mongoose。我想通过用户 ID 选择两个文档的值。

我有三个模型用户,学术和职业。我通过用户模式的 _id 与学术和职业模式建立了关系。我在这些文档中保存了一些值。现在我想通过用户 ID 选择学术和职业的文档值。

模型

 // user model
    const userSchema = new mongoose.Schema({
        name: {type: String},
        email: {type: String},
    });
    const user = mongoose.model('User', userSchema);

    // academic model
    const academicSchema = new mongoose.Schema({
        academicLevel: {type: String},
        passYear: {type: Number},
        user: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    });
    const academic = mongoose.model('Academic', academicSchema);

    // career model
    const careerSchema = new mongoose.Schema({
        jobTitle: {type: String},
        company: {type: String},
        user: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    });
    const career = mongoose.model('Career', careerSchema);

文件

// user documents

_id: objectId("5d0df6a4134d4d295ca9f212")
name: "John Doe"
email: "john@gmail.com"

_id: objectId("5d0e70a6c87ca528c0a79a0f")
name: "Mark Boucher"
email: "mark@gmail.com"


// academic documents

_id: objectId("5d60bc7188a8ef3648b8e8cf")
academicLevel: "Master"
passYear: "2018"
user: objectId("5d0e70a6c87ca528c0a79a0f")

_id: objectId("5d60d56f0cf9af32901cb2aa")
academicLevel: "Bachelor"
passYear: "2016"
user: objectId("5d0e70a6c87ca528c0a79a0f")

// career documents

_id: objectId("5d60bc1d88a8ef3648b8e8ce")
jobTitle: "Software Engineer"
company: "Daffodil Software Ltd."
user: objectId("5d0e70a6c87ca528c0a79a0f")

节点

router.get('/getInfoById', async (req, res) => {
    const user = await User
    .find(req.query.id)
    .select()

    res.send(user);
})

如何通过用户 ID 从两个文档(学术和职业)中获取值。谢谢。

标签: javascriptnode.jsmongodbmongoose

解决方案


对于我在文档中阅读的内容,我认为您正在寻找的是这样的:

const career = await Career.find({ user: user._id});
const academics = await Academics.find({ user: user._id});

或者,如果您想同时执行两个查询:

const careerOperation = Career.find({ user: user._id});
const academicsOperation = Academics.find({ user: user._id});

const [
    career, 
    academics
] = await Promise.all([career.exec(), academics.exec()]);

希望有所帮助!


推荐阅读