Как получить доступ к вложенным массивам в MongoDB? - PullRequest
0 голосов
/ 29 января 2020

У меня есть документ в MongoDB с именем Product. Продукт имеет массив категорий, а категории имеет массив подкатегорий.

Я пытаюсь выполнить sh две вещи, с которыми у меня проблемы. 1: получить категории [] с указанным идентификатором продукта. Например:

  • продукты / 10 / категории -> категории []

2: получить подкатегории [] по идентификатору продукта и идентификатору категории. Например:

  • продукты / 10 / категории / 11 / подкатегории -> подкатегории []

У меня есть следующая схема:

Products : [
{
    "id": "productId",
    "name": "productName",
    "price": "productPrice",
    "Categories": [
        {
            "_id": "catId",
            "name": "catName",
            "Subcategories": [
                {
                    "_id": "subcatId",
                    "name": "subcatName"
                },
                {
                    "_id": "subcatId",
                    "name": "subcatName"
                },
            ]
        },
        {
            "_id": "catId",
            "name": "catName",
            "Subcategories": [
                {
                    "_id": "subcatId",
                    "name": "subcatName"
                },
                {
                    "_id": "subcatId",
                    "name": "subcatName"
                },
            ]
        }
    ]
}

]

Любая помощь будет высоко ценится! Спасибо!

1 Ответ

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

Для вашего первого вопроса вы можете написать запрос следующим образом

db.collection.aggregate([
  {
    $match: {
      "id": "productId"
    }
  },
  {
    $unwind: "$Categories"
  },
  {
    $project: {
      "_id": "$Categories._id",
      "name": "$Categories.name"
    }
  }
])

Для вашего второго запроса:

db.collection.aggregate([
  {
    $match: {
      "id": "productId"
    }
  },
  {
    $unwind: "$Categories"
  },
  {
    $match: {
      "Categories._id": "catId"
    }
  },
  {
    $unwind: "$Categories.Subcategories"
  },
  {
    $project: {
      _id: "$Categories.Subcategories._id",
      name: "$Categories.Subcategories.name"
    }
  }
])
...