猫鼬查询返回多个结果

时间:2020-08-05 11:48:32

标签: javascript node.js mongodb mongoose

我的数据库结构看起来像这样:

    {
        'name' : 'entry one'
        'project' : 
            [
                {companyName : 'a name', contactPerson : [{ work_email: 'test@test.com'}] } , 
                {companyName : 'a name1', contactPerson : [{ work_email: 'test1@test.com'}] } , 
                {companyName : 'a name2', contactPerson : [{ work_email: 'test2@test.com'}] } 
            ]
    }



    {
        'name' : 'entry 2'
        'project' : 
            [
                {companyName : 'another name', contactPerson : [{ work_email: 'testing@test.com'}] } , 
                {companyName : 'another name1', contactPerson : [{ work_email: 'testing1@test.com'}] } , 
                {companyName : 'another name 2', contactPerson : [{ work_email: 'testing2@test.com'}] } 
            ]
    }

我想要的是找到属于给定work_email的companyName。因此,如果work_email为test@test.com,则应返回的公司名称应为'a name'

所以我用猫鼬建立的查询是这样的:

const projects = await ClientManagers.findOne({'project.contactPerson.work_email' : 'test@test.nl'} , 'project.companyName'); 

但这将返回所有公司名称(从条目1开始),而不是我要查找的单个公司名称。

1 个答案:

答案 0 :(得分:1)

过滤将始终返回整个文档。您需要使用投影来“重塑”它。您可以考虑使用the $ (projection) operator

const projects = await ClientManagers.findOne({'project.contactPerson.work_email' : 'test@test.nl'} , { 'project.$': 1 }); 

Mongo Playground