Как извлечь данные из коллекции, используя метод find () в произвольном формате даты - PullRequest
0 голосов
/ 27 апреля 2018

моя схема

Customers.js

import mongoose from 'mongoose';
const Customers = mongoose.Schema({
    CustomerID: { type: String, default: "" },
    Name: { type: String, default: "" },
    Email: { type: String, default: "" },
    PhoneNumber: { type: String, default: "" },
    Join_Date: { type: Date, default: null }
}, { collection: 'Customers' });
export default mongoose.model('Customers', Customers);

мой контроллер роутера

import Customers from "./Customers";
router.post('/List_All_Customers', (req, res) => {
    Customers.find().lean().exec().then((Data) => {
        res.json({Data: Data});
    }).catch((err) => {
        console.log(err);
    });
})

Мой текущий результат

{
    Data: [
        {
            CustomerID: "6ad050d4-04ac-41f2-8c93-49f68f106889",
            Name: "Uday Kumar",
            Email: "uday@blaabla.com",
            PhoneNumber: "+91-991010191",
            Join_Date: "2018-04-24T12:00:00.000Z"
        },
        {
            CustomerID: "792b67f9-9026-43bc-9017-46cd2568b4e9",
            Name: "Prem Kumar",
            Email: "prem@blaabla.com",
            PhoneNumber: "+91-881010091",
            Join_Date: "2018-04-24T15:00:00.000Z"
        }
    ]
}

Ожидаемый результат

{
    Data: [
        {
            CustomerID: "6ad050d4-04ac-41f2-8c93-49f68f106889",
            Name: "Uday Kumar",
            Email: "uday@blaabla.com",
            PhoneNumber: "+91-991010191",
            Join_Date: "Apr-24 2018, 12:00:00"
        },
        {
            CustomerID: "792b67f9-9026-43bc-9017-46cd2568b4e9",
            Name: "Prem Kumar",
            Email: "prem@blaabla.com",
            PhoneNumber: "+91-881010091",
            Join_Date: "Apr-24 2018, 15:00:00"
        }
    ]
}

В любом случае в mongodb есть результат для пользовательских дат. Я использую соединение mongoose с mongodb в своем проекте.

Я могу манипулировать данными, используя цикл for с помощью минут, но это требует времени.

Так что мне нужно одно решение для моего вопроса.

Заранее спасибо.

Комментарии приветствуются.

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Вы можете попробовать агрегацию mongoDB $dateToString.

Customers.aggregate([
  {
   $project: {
       "other_field": 1, // and so on as many fields you need
       Join_Date: {
         { $dateToString: { format: "%Y-%m-%d", date: "$Join_Date" } }
       }
    }
  }
]).then((Data) => {
        res.json({Data: Data});
    }).catch((err) => {
        console.log(err);
    });

Подробнее об этом можно узнать по адресу: https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/

0 голосов
/ 27 апреля 2018

Вы можете использовать совокупный запрос. Пример для этого запроса приведен ниже: -

 db.customers.aggregate([      
     {$project: 
         {yearMonthDayUTC: 
             {$dateToString: 
               {format: "%Y-%m-%d", 
                date: "$date" 
               } 
             },
         }
      }
    ])

Для этого запроса дата должна быть в ISO. Таким образом, при вставке элемента в БД вы можете использовать new Date(), поскольку это возвращает текущую дату в качестве объекта Date. Оболочка Монго обертывает объект Date с помощью помощника ISODate.

Пример для вставки данных в дБ приведен ниже: -

 db.sales.insert({  "_id" : 4,   "item" : "mansi",   "price" : 10,   "quantity" : 2,   "date" : new Date(Date.now())  })
0 голосов
/ 27 апреля 2018

Вы можете использовать функцию javascript map как

import Customers from "./Customers";
router.post('/List_All_Customers', (req, res) => {
    Customers.find().lean().exec().then((Data) => {
      Promise.resolve(arr.map(item=>{
       item.Join_Date = fnToConvertDateToYourFormate(item.Join_Date);
       return item;
      })).then(Data=>{
        res.json({Data: Data});
      });
    }).catch((err) => {
        console.log(err);
    });
})

OR Вы можете использовать Mongoose MapReduce http://mongoosejs.com/docs/api.html#mapreduce_mapReduce

var o = {};
o.map = function () { 
this.Join_Date = fnToConvertDateToYourFormate(this.Join_Date);
emit(this.CustomerId,this)
}
o.reduce = function (k, vals) {  }
mongoose.model('Customers').mapReduce(o, function (err, results) {
  console.log(results)
});
...