Python [mongo] - преобразовать возвращаемые поля find()

нужно получить определенные поля из Mongo. БД огромна, поэтому я предпочитаю получать значения в правильном формате, а не обрабатывать их постобработку.

Например, есть 2 поля, которые необходимо преобразовать в формат:

1_id: ObjectId('604e0dbc96a0c93a45bfc5b0') в строку как «604e0dbc96a0c93a45bfc5b0:2.birthdate: ISODate('1999-11-10T00:00:00.000Z') - в строку в формате даты« 10/11/1999 ».

Пример json в MongoDB:

      {
    _id: ObjectId('604e0dbc96a0c93a45bfc5b0'),
    address: 'BOB addrees',
    name: 'BOB',
    last_name: 'Habanero',
    birthdate: ISODate('1000-11-10T00:00:00.000Z')
}

получение конкретных полей Jsons:

      customers_cursor =  DB.customer.find({},{"_id": 1,"name" :1 ,"last_name":1 ,"customer_type":1,"address.0":1 ,"email":1 ,"birthdate" :1 ,"customer_status":1} )

Есть ли возможность использовать функции преобразования для возврата значений в find()? В противном случае, как мне лучше всего это сделать, когда у меня есть несколько полей, необходимых для форматирования значений, а в MongoDB есть МИЛЛИОН записей?

1 ответ

Решение

Демо - https://mongoplayground.net/p/4OcF0O74PvU

Для этого вам нужно использовать агрегационный запрос.

преобразовать объект в строку с помощью $toString

Используйте $dateToString для форматирования даты

      db.collection.aggregate([
  {
    "$project": {
      "_id": {
        "$toString": "$_id"
      },
      "name": 1,
      "last_name": 1,
      "customer_type": 1,
      "address.0": 1,
      "email": 1,
      "birthdate": {
        "$dateToString": {
          "format": "%d/%m/%Y",
          "date": "$birthdate"
        }
      },
      "customer_status": 1
    }
  }
])
Другие вопросы по тегам