나는 sports> categories> tournaments를 나타내는 다음 콜렉션을 사용합니다.다단계 임베디드 어레이의 항목 일치
{
"_id" : ObjectId("597846358bbbc4440895f2e8"),
"Name" : [
{ "k" : "en-US", "v" : "Soccer" },
{ "k" : "fr-FR", "v" : "Football" }
],
"Categories" : [
{
"Name" : [
{ "k" : "en-US", "v" : "France" },
{ "k" : "fr-FR", "v" : "France" }
],
"Tournaments" : [
{
"Name" : [
{ "k" : "en-US", "v" : "Ligue 1" },
{ "k" : "fr-FR", "v" : "Ligue 1" }
],
},
{
"Name" : [
{ "k" : "en-US", "v" : "Ligue 2" },
{ "k" : "fr-FR", "v" : "Ligue 2" }
],
}
]
},
{
"Name" : [
{ "k" : "en-US", "v" : "England" },
{ "k" : "fr-FR", "v" : "Angleterre" }
],
"Tournaments" : [
{
"Name" : [
{ "k" : "en-US", "v" : "Premier League" },
{ "k" : "fr-FR", "v" : "Premier League" }
],
},
{
"Name" : [
{ "k" : "en-US", "v" : "Championship" },
{ "k" : "fr-FR", "v" : "Championnat" }
],
}
]
},
]
}
카테고리의 이름과 토너먼트 이름을 사용하여 컬렉션을 쿼리하고 싶습니다. 나는 성공적으로 다음 코드를 사용하여 "$ elemMatch"를 사용했습니다
db.getCollection('Sport').find({
Categories: {
$elemMatch: {
Name: {
$elemMatch: { v: "France" }
},
Tournaments: {
$elemMatch: {
Name: {
$elemMatch: { v: "Ligue 1" }
}
}
}
}
} },
{ "Categories.$": 1, Name: 1 })
그러나, 나는 범주 객체 만 일치하는 대회를받을 수 없습니다. 이 질문에 대답 사용 : MongoDB Projection of Nested Arrays, 나는 집계 구축 한 : 나는 조건을 사용하려고
db.getCollection('Sport').aggregate([{
"$match": {
"Categories": {
"$elemMatch": {
"Name": {
"$elemMatch": {
"v": "France"
}
},
"Tournaments": {
"$elemMatch": {
"Name": {
"$elemMatch": {
"v": "Ligue 1"
}
}
}
}
}
}
}
}, {
"$addFields": {
"Categories": {
"$filter": {
"input": {
"$map": {
"input": "$Categories",
"as": "category",
"in": {
"Tournaments": {
"$filter": {
"input": "$$category.Tournaments",
"as": "tournament",
"cond": {
// stuck here
}
}
}
}
}
},
"as": "category",
"cond": {
// stuck here
}
}
}
}
}
])
을하지만, MongoDB를은 (정의되지 않은 변수의 사용 :)를 인식하지 못합니다 $$ 유지하고 $ $ PRUNE ($redact) $ anyElementTrue를 사용하고 "Name"속성에서 $ map을 사용할 때.
내 질문 : 이름 모음에 문자열이 있는지 확인하려면 어떻게해야합니까?
대단히 감사합니다. 내 설계에서 내포 된 배열을 사용하는 경우 임베디드 문서는 부모 스포츠없이 쿼리되지 않습니다. 우리는 유형별로 하나의 컬렉션을 기반으로 관계형 디자인을 피하려고했습니다. 그러나, 당신 말이 맞아, 난 루트 수준의 배열 (성공)을 업데이 트하려고했지만 전체 개체를 교체하지 않고 중첩 된 배열을 업데이 트하는 것은 불가능한 것 같습니다. – Clement