0

我有这个文件

{
    _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
        }

搜索必须由 subDocument 上的 _id 完成,例如。_id: 5f8970f19e6afb628a2edd07_5f8970f18b3aa

4

1 回答 1

0

这是 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

于 2020-10-20T15:11:49.083 回答