如何使用自定义日期格式

时间:2018-04-27 06:08:31

标签: javascript node.js mongodb mongoose momentjs

我的架构

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循环使用momentjs操作数据,但这需要时间。

所以我需要一个解决方案来解决我的问题。

提前致谢。

赞赏。

3 个答案:

答案 0 :(得分:1)

您可以使用javascript 地图功能 的

import React, { Component } from 'react';
import {
    Platform,
    StyleSheet,
    View
} from 'react-native';

type Props = {};
export default class App extends Component<Props> {
    render() {
        return (
            <View style={styles.container}>
                <Text>{Hello}</Text>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
    welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
    },
    instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5,
    },
});

<强> OR 你可以使用Mongoose MapReduce http://mongoosejs.com/docs/api.html#mapreduce_mapReduce

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);
    });
})

答案 1 :(得分:0)

您可以尝试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/

了解详情

答案 2 :(得分:0)

您可以使用聚合查询。下面给出了此查询的示例: -

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

对于此查询,日期应为ISO。因此,在将元素插入数据库时​​,可以使用new Date(),因为这会将当前日期作为Date对象返回。 mongo shell使用ISODate帮助程序包装Date对象。

在db中插入数据的示例如下: -

 db.sales.insert({  "_id" : 4,   "item" : "mansi",   "price" : 10,   "quantity" : 2,   "date" : new Date(Date.now())  })