【问题标题】:Mongoose query returning more than one resultMongoose 查询返回多个结果
【发布时间】:2020-11-25 14:11:20
【问题描述】:

我的数据库结构是这样的:

    {
        '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是test@test.com,那么应该返回的公司名称应该是'a name'

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

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

但这会返回所有公司名称(从条目一开始),而不是我正在寻找的一个。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

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

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

    Mongo Playground

    【讨论】:

    • 不是project.$.companyName吗?因为他只想要名字
    • 这非常有用,我还不知道,非常感谢
    • @Ifaruki 是的,我可以自己完成最后一步,谢天谢地!
    • 是否可以更新找到的条目?假设我想更改找到的条目的公司名称。我该怎么做?或者有什么文章或者什么你可以把我重定向到。
    • @Kevin.a 当然,你可以看看这里:stackoverflow.com/questions/55917114/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2021-07-22
    • 2015-12-07
    • 2023-04-09
    • 2010-09-25
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多