Mongodb 如何在mongoose中聚合嵌套查找数组?
我有一个如何查找嵌套数组的问题,例如,我有4个集合Mongodb 如何在mongoose中聚合嵌套查找数组?,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我有一个如何查找嵌套数组的问题,例如,我有4个集合 用户集合 语言集合 工作 提交收藏 我的查询聚合是: db.cvsubmit.aggregate([ { $lookup: { from: "user", localField: "id_user", foreignField: "_id", as: "id_user" } }, {
db.cvsubmit.aggregate([
{
$lookup: {
from: "user",
localField: "id_user",
foreignField: "_id",
as: "id_user"
}
},
{
$lookup: {
from: "language",
localField: "id_user.language.language_id",
foreignField: "_id",
as: "id_user.language.language_id"
}
},
])
但结果是:
[
{
"_id": "11",
"id_job": "11",
"id_user": {
"language": {
"language_id": [
{
"_id": "919",
"name": "English"
},
{
"_id": "920",
"name": "Chinese"
}
]
}
}
}
]
我想要这样的结果,同时显示所有用户数据细节,如name
:
[
{
"_id": "11",
"id_job": "11",
"id_user": {
"_id": "1234",
"name": "Tony"
"language": [
{
"_id": "919",
"name": "English",
"Level": "Expert"
},
{
"_id": "920",
"name": "Chinese",
"level": "Basic"
}
]
}
}
]
Mongo游乐场连接线
之前谢谢。
与$lookup
集合用户
解构$unwind
数组id\u用户
使用$lookup
收集并返回语言
字段语言
迭代$map
数组的外观id\u user.language
要迭代从集合返回的$reduce
数组的循环,请检查条件语言
语言id是否匹配,然后返回
名称
"cvsubmit": [
{
"_id": "11",
"id_user": "1234",
"id_job": "11"
}
]
db.cvsubmit.aggregate([
{
$lookup: {
from: "user",
localField: "id_user",
foreignField: "_id",
as: "id_user"
}
},
{
$lookup: {
from: "language",
localField: "id_user.language.language_id",
foreignField: "_id",
as: "id_user.language.language_id"
}
},
])
[
{
"_id": "11",
"id_job": "11",
"id_user": {
"language": {
"language_id": [
{
"_id": "919",
"name": "English"
},
{
"_id": "920",
"name": "Chinese"
}
]
}
}
}
]
[
{
"_id": "11",
"id_job": "11",
"id_user": {
"_id": "1234",
"name": "Tony"
"language": [
{
"_id": "919",
"name": "English",
"Level": "Expert"
},
{
"_id": "920",
"name": "Chinese",
"level": "Basic"
}
]
}
}
]
db.cvsubmit.aggregate([
{
$lookup: {
from: "user",
localField: "id_user",
foreignField: "_id",
as: "id_user"
}
},
{ $unwind: "$id_user" },
{
$lookup: {
from: "language",
localField: "id_user.language.language_id",
foreignField: "_id",
as: "languages"
}
},
{
$addFields: {
languages: "$$REMOVE",
"id_user.language": {
$map: {
input: "$id_user.language",
as: "l",
in: {
_id: "$$l._id",
level: "$$l.level",
name: {
$reduce: {
input: "$languages",
initialValue: "",
in: {
$cond: [
{ $eq: ["$$this._id", "$$l.language_id"] },
"$$this.name",
"$$value"
]
}
}
}
}
}
}
}
}
])