【问题标题】:How to rename path in response for populate如何重命名路径以响应填充
【发布时间】:2016-11-23 21:09:38
【问题描述】:

我有一个这样的查询:

galleryModel.find({_id: galleryId})
            .populate({
                model: 'User',
                path: 'objectId',
                select: 'firstName lastName'
            })

objectId 的结束响应如下:

objectId: {
...
}

如何在不更改实际路径的情况下将其更改为 user 以响应?

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-populate


    【解决方案1】:

    您可以通过 mongoose 4.5 版中引入的虚拟填充来完成此操作。为此,您需要在 mongoose 模式中定义一个虚拟字段。

    var GallerySchema = new mongoose.Schema({
        name: String,
        objectId: {
            type: mongoose.Schema.Types.ObjectId
        },
    });
    
    GallerySchema.virtual('user', {
        ref: 'User',
        localField: 'objectId', 
        foreignField: '_id' 
    });
    

    当您运行查找查询时,只需使用用户填充它。

    Gallry.find({_id: galleryId}).populate('user','firstName lastName').exec(function(error, gallery) {
        console.log(error);
        console.log(gallery);;
    });
    

    以上代码未经程序测试,可能有错别字,您可以在下面的链接中获取更多关于 mongoose virtual populate 的详细信息

    http://mongoosejs.com/docs/populate.html

    【讨论】:

    • 这行得通,但我需要使用data = await Model.findOne({...})data.populate("name", {key: 1}).execPopulate()执行与查询分离的填充,并且如您所见,我没有使用字符串来定义将要使用的属性被检索/异步等待
    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2018-10-10
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多