$project: Is it possible to access a property of an expression result in just one single stage?

前端 未结 2 639
独厮守ぢ
独厮守ぢ 2021-01-20 06:21

Is there any way to carry out the following operation in just one $project stage?

db.getCollection(\'users\').aggregate([
    {
        $project         


        
相关标签:
2条回答
  • 2021-01-20 06:57

    You need $let operator:

    db.getCollection('users').aggregate([
        {
            $project : {
                domain : {
                    $let: {
                        vars: { firstEmail: { $arrayElemAt : ["$emails", 0] } },
                        in: "$$firstEmail.domain"
                    }
                }
            }
        }
    ])
    

    Mongo Playground

    0 讨论(0)
  • 2021-01-20 07:07

    When working with array of objects, you can automatically get array of objects's properties with the dot notation. So the following will perfectly work :

    db.getCollection('users').aggregate([
        {
            $project : {
                domain: { $arrayElemAt : ["$emails.domain", 0] }
            }
        }, 
    ])
    

    Mongo playground

    0 讨论(0)
提交回复
热议问题