Извлечение дочерних объектов в массив внутри агрегации MongoDB - PullRequest
0 голосов
/ 29 ноября 2018

В моей коллекции все мои документы имеют массив tags:

"tags" : [
        {
            "name" : "a", 
            "weight" : NumberInt(32)
        }, 
        {
            "name" : "b", 
            "weight" : NumberInt(26)
        }, 
        {
            "name" : "c", 
            "weight" : NumberInt(25)
        }, 
        ...
]

Каждый объект в массиве имеет ключи name и weight.Мне нужно удалить ключ weight, чтобы у меня остался names в одноуровневом массиве, например ["a", "b", "c"...]


Объяснение, почему мне нужно это сделать:

Внутри моей агрегации я хочу вычислить количество совпадений между массивом x = ["a", "b", "d"] и любыми тегами, которые есть у каждого документа.

Насколько я понял, внутри$project Я создаю новую переменную следующим образом:

"$project": {
    ...
    "diff": {
       "$size": {
          "$setIntersection": [ x, "$tags" } ]
       }
    },
    ...
}

Но, конечно, это не работает, так как массив $tags полон объектов, а не строк.Мне нужно убрать weight из массива тегов и оставить его как массив names, как ["a", "b", "c" ...], тогда он должен работать.

Как мне поступить так?

1 Ответ

0 голосов
/ 29 ноября 2018

Просто используйте обозначение . dot с name внутри tags.Что-то вроде

db.collection.aggregate([
  { "$project": {
    "matches": {
      "$size": {
        "$setIntersection": [
          [ "a", "b", "d"],
          "$tags.name"
        ]
      }
    }
  }}
])
...