【发布时间】:2019-03-09 01:13:59
【问题描述】:
技能集合:
"skillID" : "10cff2ae-76e7-455a-b1f2-07c6104d254b",
"skillname" : "java",
"languageID" : "84c2613c-81c3-4477-ab38-433aaef74373",
"languagename" : "English",
"noofendorsement" : 0
"skillID" : "10cff2ae-76e7-455a-b1f2-07c6104d254b",
"skillname" : "जावा",
"languageID" : "hindi",
"languagename" : "hindi",
"noofendorsement" : 0
"skillID" : "39bca1af-bea4-4a24-9f50-33992f8f8a6e",
"skillname" : "python",
"languageID" : "84c2613c-81c3-4477-ab38-433aaef74373",
"languagename" : "English",
"noofendorsement" : 0
"skillID" : "39bca1af-bea4-4a24-9f50-33992f8f8a6e",
"skillname" : "अजगर",
"languageID" : "hindi",
"languagename" : "hindi",
"noofendorsement" : 0
工作集合:
"_id" : ObjectId("5bace08ce4b022aa88870ab2"),
"_class" : "com.citizenchat.model.Jobs",
"userID" : "ff7f88d9-d0e5-4c10-a7b0-b9fd8b5e89eb",
"jobID" : "4d0b02b9-c508-42cb-a2c1-417f6b3d422b",
"jobProfile" : "Legislators",
"lastDate" : "29-09-2018",
"jobEndDateMilliSeconds" : NumberLong(1538245799999),
"jobEndDate" : ISODate("2018-09-29T18:29:59.999Z"),
"jobstatus" : "Expired",
"jobType" : "Fulltime",
"jobDescription" : "Job",
"postingDate" : "27-09-2018 13:52:12.787",
"user_Skilllist" : [
"10cff2ae-76e7-455a-b1f2-07c6104d254b"
],
"user_occupationname" : "Legislators",
"user_occupationid" : "154bddd1-5224-47cf-b3d0-f7dfc3ae9c83",
"jobPostDateTimeMilliseconds" : NumberLong(1538850599999),
我正在使用以下聚合查询。
db.Jobs.aggregate([
{"$match":{"jobID":"4d0b02b9-c508-42cb-a2c1-417f6b3d422b"}},
{
$lookup:
{
from: "Skill",
let:{"user_Skilllist":"$user_Skilllist"},
pipeline:[
{"$match":
{"$or":[
{"languageID":"hindi","$expr":{"$in":["$skillID","$$user_Skilllist"]}},
{"languageID":"84c2613c-81c3-4477-ab38-433aaef74373","$expr":{"$in":["$skillID","$$user_Skilllist"]}}
]
}
},
],
as: "skills"
}
},
])
我得到以下结果。但我的要求是 1)我将通过语言ID仅获得该语言的技能。如果我喜欢的语言不适合该技能,则需要从默认语言英语中获取。但是当我通过语言ID时,相同的技能存在于不同的我正在学习的语言。
2)从聚合中获取所有技能后。将所有技能名称传递给一个数组。
{
"_id" : ObjectId("5bace08ce4b022aa88870ab2"),
"_class" : "com.citizenchat.model.Jobs",
"userID" : "ff7f88d9-d0e5-4c10-a7b0-b9fd8b5e89eb",
"jobID" : "4d0b02b9-c508-42cb-a2c1-417f6b3d422b",
"jobProfile" : "Legislators",
"lastDate" : "29-09-2018",
"jobEndDateMilliSeconds" : NumberLong(1538245799999),
"jobEndDate" : ISODate("2018-09-29T18:29:59.999Z"),
"jobstatus" : "Expired",
"jobType" : "Fulltime",
"jobDescription" : "Job",
"postingDate" : "27-09-2018 13:52:12.787",
"user_Skilllist" : [
"10cff2ae-76e7-455a-b1f2-07c6104d254b"
],
"user_occupationname" : "Legislators",
"user_occupationid" : "154bddd1-5224-47cf-b3d0-f7dfc3ae9c83",
"jobPostDateTimeMilliseconds" : NumberLong(1538850599999),
"skills" : [
{
"_id" : ObjectId("5ba0fbc7e4b03e2c8b8f6519"),
"_class" : "com.citizenchat.model.Skill",
"skillID" : "10cff2ae-76e7-455a-b1f2-07c6104d254b",
"skillname" : "java",
"languageID" : "84c2613c-81c3-4477-ab38-433aaef74373",
"languagename" : "English",
"noofendorsement" : 0
},
{
"_id" : ObjectId("5bb47d07fc7ab61be62de768"),
"skillID" : "10cff2ae-76e7-455a-b1f2-07c6104d254b",
"skillname" : "जावा",
"languageID" : "hindi",
"languagename" : "hindi",
"noofendorsement" : 0
}
]
}
我希望输出应该是这样的
"userID" : "ff7f88d9-d0e5-4c10-a7b0-b9fd8b5e89eb",
"jobID" : "4d0b02b9-c508-42cb-a2c1-417f6b3d422b",
"jobProfile" : "Legislators",
"lastDate" : "29-09-2018",
"jobEndDateMilliSeconds" : NumberLong(1538245799999),
"jobEndDate" : ISODate("2018-09-29T18:29:59.999Z"),
"jobstatus" : "Expired",
"jobType" : "Fulltime",
"jobDescription" : "Job",
"postingDate" : "27-09-2018 13:52:12.787",
"user_Skilllist" : [
"10cff2ae-76e7-455a-b1f2-07c6104d254b"
],
"user_occupationname" : "Legislators",
"user_occupationid" : "154bddd1-5224-47cf-b3d0-f7dfc3ae9c83",
"jobPostDateTimeMilliseconds" : NumberLong(1538850599999),
"skills" : [
"जावा",
"अजगर"
]
}
【问题讨论】:
-
@Veeram 帮帮我
-
你有$或。如果您想要与指定语言匹配的文档,只需使用
{"languageID":"hindi","$expr":{"$in":["$skillID","$$user_Skilllist"]}},这就是您想要的吗? -
印地语是我的首选语言。没有印地语语言技能文档意味着它必须采用默认语言英语。
-
@Veeram 请检查
标签: mongodb mongodb-query aggregation-framework aggregate