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

Ale*_*lom 6 mongoose mongodb node.js mongoose-populate mongoose-schema

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

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

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

这是我如何做人口:

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

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

{ _id: 5ad903d90443fe13b8c9061a,
    client: [ { _id: 5b3755fe69635d1e942d00a8, email: 'user@user.com' } ] }
Run Code Online (Sandbox Code Playgroud)

这就是我想要实现的目标:

{ _id: 5ad903d90443fe13b8c9061a,
    client: { _id: 5b3755fe69635d1e942d00a8, email: 'user@user.com' } }
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助或建议!

FAR*_*LOU 6

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

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

});
Run Code Online (Sandbox Code Playgroud)


Rag*_*kat 0

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