Toplu sorguda koşullu Mongodb $ araması
Sep 16 2020
Bunun article_parentgibi belgelerin olduğu bir koleksiyonum var :
{ "name": "name1", "group": 1 }
{ "name": "name2", "group": 1 }
{ "name": "name3", "group": 2 }
{ "name": "name4", "group": 3 }
{ "name": "name5", "group": 2 }
ve articletüm postalarımın hangi mağaza adında başka bir koleksiyonum var
{"parent_name": "name1", "value": "val1"}
{"parent_name": "name2", "value": "val2"}
{"parent_name": "name3", "value": "val3"}
{"parent_name": "name4", "value": "val4"}
{"parent_name": "name5", "value": "val5"}
Bunun article_parent.groupgibi 2 olan tüm makaleleri almak istiyorum
{"parent_name": "name3", "value": "val3", parent: { "name": "name3", "group": 2 }}
{"parent_name": "name5", "value": "val5", parent: { "name": "name5", "group": 2 }}
Bu sorgum var:
db.article.aggregate([{
$lookup: { from: "article_parent", let: { name: "$parent_name"
},
pipeline: [
{ $match: { group: 2 } }
],
as: "parent"}}
])
ancak sorgu herhangi bir makale bulamadı
Sorgum nerede yanlış?
Ne yapabilirim?
Teşekkürler
Yanıtlar
1 varman Sep 15 2020 at 23:48
Denediğin şey takdir edildi. İlişkisiz alt sorgular kullanmaya çalıştınız . Dolayısıyla, pipeline içinde tanımladığınız bir değişkeni letkullandığınızda, $ expr kullanmanız gerekir . Yaptığınız sorun, her iki koleksiyona da belirli bir alan tarafından katılmamış olmanızdı.
[
{
$lookup: {
from: "article_parent",
let: {
pname: "$parent_name" }, pipeline: [ { $match: {
$expr: { $eq: [
"$name", "$$pname"
]
},
group: 2
}
}
],
as: "parent"
}
},
{
$match: { parent: { $ne: []
}
}
}
]
Çalışma Mongo oyun alanı
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'