Найти и посчитать совпадения в массиве Монго на основе условия - PullRequest
0 голосов
/ 14 сентября 2018

Представьте, что у меня есть коллекция документов, похожая на:

{
_id :ObjectId("45645645gdfgdfgdf"),
article:"article one",
topic:["config","develop","show"],
keys[
    {subject:"one",object"abc"},
    {subject:"one",object"def"},
    {subject:"two",object"ghi"},
    {subject:"four",object"jkl"},
    {subject:"four",object"mnl"},
    {subject:"four",object"mnl"},
]
},
{
_id :ObjectId("45645645gdfgdfgdf"),
article:"article two",
topic:["config","installing"],
keys[
    {subject:"one",object"abc"},
    {subject:"one",object"def"},
    {subject:"two",object"ghi"},
    {subject:"two",object"jkl"},
]
},
{
_id :ObjectId("45645645gdfgdfgdf"),
article:"article three",
topic:["config","installing"],
keys[
    {subject:"five",object"abc"},
    {subject:"five",object"def"},
    {subject:"two",object"ghi"},
    {subject:"two",object"jkl"},
]
}

Я хочу подсчитать каждый предмет в массиве на основе условия, отфильтрованного по теме, например, представьте, что я ищу по теме: "config" и subject: ["one", "four"] требуемый результат быть

{article :"article one", sum:5},{article :"article two", sum:2}

Заранее

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете использовать ниже агрегации.

db.colname.aggregate([
  {"$match":{"topic":"config","subject":{"$in":["one","four"]}}},
  {"$project":{
    "article":1,
    "sum":{
      "$size":{
        "$filter":{
          "input":"$keys",
          "cond":{"$in":["$$this.subject",["one","four"]]}
        }
      }
    }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...