如何获取内部数组的特定值以及 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));
});
};
我有一个合集如下图
[
{
"_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));
});
};