Коллекция навыков:
"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) я передам languageID, чтобы получить навыки только на этом языке. Если мой предпочитаемый язык недоступен для этого навыка, необходимо получить языковой стандарт по умолчанию на английском языке. Но когда я передаю тот же навык с идентификатором языкакоторый присутствует на разных языках, которые я получаю.
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" : [
"जावा",
"अजगर"
]
}