Можно ли запросить имя поля по его значению в MongoDB? - PullRequest
1 голос
/ 03 августа 2020

мой документ выглядит так:

{
    fruits:{
       apple:[{shop:shop_1},{shop:shop_2}],
       peach:[{shop:shop_1},{shop:shop_2}]
   }
}

как я могу запросить документ с помощью shop_2, а затем вернуть ['apple', 'peach']?

или у меня есть сделать это на моем языке программирования?

необработанный файл можно импортировать в mon go:

{"fruits":{"apple":[{"shop":"shop_1"},{"shop":"shop_2"}],"peach":[{"shop":"shop_1"},{"shop":"shop_2"}]}}

1 Ответ

1 голос
/ 03 августа 2020

Вы можете использовать $ objectToArray и перебирать массив, чтобы отфильтровать совпадающие ключи:

db.collection.aggregate([
  {
    "$addFields": {
      "fruits": {
        $map: {
          input: {
            $filter: {
              input: {
                "$objectToArray": "$fruits"
              },
              as: "datum",
              cond: {
                "$setIsSubset": [
                  [
                    "shop_2"
                  ],
                  {
                    "$map": {
                      "input": "$$datum.v",
                      "as": "shop",
                      "in": "$$shop.shop"
                    }
                  }
                ]
              }
            }
          },
          as: "fruit",
          in: "$$fruit.k"
        }
      }
    }
  }
])

MongoPlayground

...