如何获取内部数组的特定值以及 Mongoose 中的主要值

How to get particular value of inner Array along with main values in Mongoose

我有一个合集如下图

[
    {
        "_id":"564d747ce27a66cd5aa6fdf2",
        "Name":"Person1",
        "Role":[
            {
                "_id":"564d7253e27a66cd5aa6fdee",
                "RoleName":"AAA",
                "Rel":[
                    {
                        "_id":"564d728be27a66cd5aa6fdf0",
                        "Name":"Lead"
                    }
                ]
            },
            {
                "_id":"564d7253e27a66cd5aa6fdef",
                "RoleName":"BBB",
                "Rel":[
                    {
                        "_id":"564d728be27a66cd5aa6fdf0",
                        "Name":"Member"
                    }
                ]
            }
        ]
    },
    {
        "_id":"564d747ce27a66cd5aa6fdf2",
        "Name":"Person2",
        "Role":[
            {
                "_id":"564d7253e27a66cd5aa6fdee",
                "RoleName":"AAA",
                "Rel":[
                    {
                        "_id":"564d728be27a66cd5aa6fdf0",
                        "Name":"Lead"
                    }
                ]
            }
        ]
    }
]

现在,我想检查角色 ID 并获取其相关 'Rel' 以及名称,如下所示:

[
    {
        "_id":"564d747ce27a66cd5aa6fdf2",
        "Name":"Person1",
        "Role":[
            {
                "_id":"564d7253e27a66cd5aa6fdee",
                "RoleName":"AAA",
                "Rel":[
                    {
                        "_id":"564d728be27a66cd5aa6fdf0",
                        "Name":"Lead"
                    }
                ]
            }
        ]
    },
    {...}
]

我已经使用 Mongoose 获取数据,如下所示:

exports.findone = function(req, res) {
    var id = req.params.id;
    model1.find({'Role._id': id}).select('Name Role').exec(function(err, results) {
         res.send(results));    
  });
};

在这里,当我发送角色 ID 作为输入时,它会获取具有上述角色 ID 的人。但是在 'Role' 节点中,我得到了与之关联的所有角色。以下是我针对上述查询获得的输出。

[
    {
        "_id":"564d747ce27a66cd5aa6fdf2",
        "Name":"Person1",
        "Role":[
            {
                "_id":"564d7253e27a66cd5aa6fdee",
                "RoleName":"AAA",
                "Rel":[
                    {
                        "_id":"564d728be27a66cd5aa6fdf0",
                        "Name":"Lead"
                    }
                ]
            },
            {
                "_id":"564d7253e27a66cd5aa6fdef",
                "RoleName":"BBB",
                "Rel":[
                    {
                        "_id":"564d728be27a66cd5aa6fdf0",
                        "Name":"Member"
                    }
                ]
            }
        ]
    }
]

我想获取特定角色而不是要显示的所有角色。你能帮我完成这个吗...

您可以将 select 操作与 $elemMatch 一起使用,以便只显示您想要的角色,如 MongoDB docs 中所述。

您的数据提取看起来像这样:

exports.findone = function(req, res) {
    var id = req.params.id;
    model1.find({'Role._id': id}).select({Name: 1, Role: {$elemMatch: {_id: id}}}).exec(function(err, results) {
         res.send(results));    
  });
};