Как перебрать массив внутри объекта используя mongodb - PullRequest
2 голосов
/ 20 июня 2019

Я пытался перебрать массив внутри значения ключа объекта, используя mongodb.но он не работает. Как этого добиться.

Код базы данных

db.product.aggregate([
    {
      $lookup: {
        from: "ecomm_prod_db_category",
        localField: "category_id",
        foreignField: "_id",
        as: "ordersetails"
      }
    },
    {
      $project: {
        product_name: 1,
        product_image: { $arrayElemAt: ["$product_image", 0] },
        ordersetails: 1
      }
    }
  ]).toArray();

Я получил вывод

{ _id: 5cebc08af27fa0230090425a,
    product_name: 'Wires Solutions USB 2.0 Cable AM-BM 5Meters',
    ordersetails: [ {"name":"bourbon"} ],
    product_image: 'https://images-na.ssl-images-amazon.com/images/I/617XwKKAvzL._SX569_.jpg' }

Исключенный выход

{ _id: 5cebc08af27fa0230090425a,
  product_name: 'Wires Solutions USB 2.0 Cable AM-BM 5Meters',
  ordersetails: "bourbon",
  product_image: 'https://images-na.ssl-images-amazon.com/images/I/617XwKKAvzL._SX569_.jpg' }

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

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

db.product.aggregate([
  { "$lookup": {
    "from": "ecomm_prod_db_category",
    "localField": "category_id",
    "foreignField": "_id",
    "as": "ordersetails"
  }},
  { "$project": {
    "product_name": 1,
    "product_image": { "$arrayElemAt": ["$product_image", 0] },
    "ordersetails": { "$arrayElemAt": ["$ordersetails.name", 0] }
  }}
]).toArray()
0 голосов
/ 20 июня 2019

Если у вас есть несколько объектов в массиве orderdetails, вы можете использовать следующий запрос:

db.product.aggregate([
    {
      $lookup: {
        from: "ecomm_prod_db_category",
        localField: "category_id",
        foreignField: "_id",
        as: "ordersetails"
      }
    },
    {
      $project: {
        product_name: 1,
        product_image: { $arrayElemAt: ["$product_image", 0] },
        ordersetails: 1
      }
    }, 
    {
       $unwind: "ordersetails"
    },
    {
      $project: {
        product_name: 1,
        product_image: 1,
        ordersetails: "$ordersetails.name"}
      }
    }, 
  ]).toArray();
...