猫鼬为什么将虚拟字段填充为数组而不是单个项?

时间:2018-09-16 11:09:24

标签: node.js mongodb mongoose mongoose-schema mongoose-populate

我想将一个猫鼬作为JSON对象填充到一个虚拟字段中,但是它总是返回一个包含单个项目的数组。

这是我的方案代码(带有虚拟字段):

Order.virtual('client', {
    type: 'ObjectId',
    ref: 'User',
    localField: 'clientId',
    foreignField: '_id'
});

这是我的人口方法:

Order.findOneAndUpdate({ internalStatus: 2}, { internalStatus: 3 })
    .lean()
    .populate({ path: 'client', select: 'email' })
    .exec(function (err, order) {
        //...
    });

这是我在返回的JSON中收到的内容:

{ _id: 5ad903d90443fe13b8c9061a,
    client: [ { _id: 5b3755fe69635d1e942d00a8, email: 'user@user.com' } ] }

这是我想要实现的:

{ _id: 5ad903d90443fe13b8c9061a,
    client: { _id: 5b3755fe69635d1e942d00a8, email: 'user@user.com' } }

感谢您的帮助或建议!

2 个答案:

答案 0 :(得分:0)

在猫鼬mongoose@5.0.17中,我看到它们以JSON_OBJECT的形式返回,但是当我升级到mongoose@5.3.0时,它开始重新调整为JSON_ARRAY

答案 1 :(得分:0)

您必须在虚拟字段配置中添加“ justOne:true ”:

Order.virtual('client', {
    type: 'ObjectId',
    ref: 'User',
    localField: 'clientId',
    foreignField: '_id',
    justOne : true

});