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ı