MongoDB соответствует подполю в массиве - PullRequest
1 голос
/ 27 января 2020

У меня возникает следующая проблема, когда я пытаюсь сопоставить элементы в массиве на основе значения в одном из подполей массива.

Пример структуры документа:

{
    "A" : {
        "C" : "abc"
    },
    "B" : [ 
        {
            "C" : "def"
        }, 
        {
            "C" : "ghi"
        }, 
        {
            "C" : "jkl"
        }, 
        {
            "C" : "abc"
        }
    ]
}

Пример документа результата :

{
    "A" : {
        "C" : "abc"
    },
    "B" : [ 
        {
            "C" : "abc"
        }
    ]
}

Моя попытка:

db.collection.aggregate([
    {'$match': {
        'B.C': 'A.C'
        }},
    {'$project': {
        'A.C': 1,
        'B.C': 1
        }}
])

Где я делаю ошибку?

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 января 2020

Вы можете использовать $filter агрегацию здесь

db.collection.aggregate([
  { "$addFields": {
    "B": {
      "$filter": {
        "input": "$B",
        "cond": { "$eq": ["$$this.C", "$A.C"] }
      }
    }
  }}
])
0 голосов
/ 27 января 2020

Вы можете просто l oop в подмассив, используя часть qry

mainarray.subarray name

eg : B.C
...