Извлечение вложенного документа в Moloquent

#mongodb #moloquent

#mongodb #moloquent

Вопрос:

У меня есть этот документ

 {
    _id: ObjectId('5f8970f19e6afb628a2edd07'),
    name: 'pack 1',
    price: 100,
    min_price: 100,
    updated_at: ISODate('2020-10-16T10:07:45.570Z'),
    created_at: ISODate('2020-10-16T10:07:45.530Z'),
    available_quantity: -1,
    quantity: -1,
    slots: [
        {
            duration: '365',
            price: 100,
            _id: '5f8970f19e6afb628a2edd07_5f8970f18b3aa',
            created_at: ISODate('2020-10-16T10:07:45.529Z'),
            updated_at: ISODate('2020-10-16T10:07:45.529Z'),
            available_quantity: -1,
            quantity: -1
        },
        {
            duration: '255',
            _id: '5f8970f19e6afb628a2edd07_5f8970f18b3c7',
            created_at: ISODate('2020-10-16T10:07:45.529Z'),
            updated_at: ISODate('2020-10-16T10:07:45.529Z'),
            price: 100,
            available_quantity: -1,
            quantity: -1
        }
    ]
}
  

и я хотел бы, чтобы только этот вложенный документ использовал Moloquent

 {
            duration: '365',
            price: 100,
            _id: '5f8970f19e6afb628a2edd07_5f8970f18b3aa',
            created_at: ISODate('2020-10-16T10:07:45.529Z'),
            updated_at: ISODate('2020-10-16T10:07:45.529Z'),
            available_quantity: -1,
            quantity: -1
        }
  

Поиск должен выполняться по _id в вложенном
документе, например. _id: 5f8970f19e6afb628a2edd07_5f8970f18b3aa

Комментарии:

1. Я могу написать для него запрос mongo. Сможете ли вы преобразовать его в moloquent?

Ответ №1:

Вот запрос mongo.

 db.collection.aggregate([
  {
    "$unwind": "$slots"
  },
  {
    "$match": {
      "slots._id": "5f8970f19e6afb628a2edd07_5f8970f18b3aa"
    }
  },
  {
    "$project": {
      _id: 0,
      price: "$slots.price",
      duration: "$slots.duration",
      created_at: "$slots.created_at",
      updated_at: "$slots.updated_at",
      _id: "$slots._id",
      available_quantity: "$slots.available_quantity",
      quantity: "$slots.quantity"
    }
  }
])
  

Также здесь создана игровая площадка Mongo.

https://mongoplayground.net/p/-Vmv3_I2RyM