Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用自定义日期格式的find()方法从集合中检索数据_Javascript_Node.js_Mongodb_Mongoose_Momentjs - Fatal编程技术网

Javascript 如何使用自定义日期格式的find()方法从集合中检索数据

Javascript 如何使用自定义日期格式的find()方法从集合中检索数据,javascript,node.js,mongodb,mongoose,momentjs,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,

我的模式

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连接

我可以通过momentjs使用for循环操作数据,但这需要时间

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

提前谢谢


欢迎评论。

您可以使用javascript映射功能 喜欢

您可以使用Mongoose MapReduce


您可以尝试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);
    });
更多信息,请访问:


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

 db.customers.aggregate([      
     {$project: 
         {yearMonthDayUTC: 
             {$dateToString: 
               {format: "%Y-%m-%d", 
                date: "$date" 
               } 
             },
         }
      }
    ])
对于此查询,日期应为ISO格式。因此,在将元素插入数据库时,您可以使用
newdate()
,因为这会将当前日期作为日期对象返回。mongo shell使用ISODate辅助对象包装日期对象

下面给出了在数据库中插入数据的示例:-

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

“我可以通过momentjs使用for循环来操作数据,但这需要时间。”事实上,这是你最好的选择,“如果你真的改变了事情”,也就是说。现代MongoDB版本有一个
$dateToString
,但输出格式有限。不过,您确实“不应该”更改此输出。这是发送给客户机的数据,ISO格式是客户机真正应该接收的格式。如果“客户机”希望以不同的格式显示,那么它应该自己这样做,因为它可以专门为其“区域设置”设置格式。每个国家/地区的日期都不相同。因此,mongodb除了有限的$dateToStringmapReduce可以在服务器上执行JavaScript操作之外,没有其他可行的解决方案,但响应是单个BSON文档,通常不实用。我的主要观点是“不要这样做”。日期的输出与预期完全一致。相反,在客户端处理不同的格式是更好的方法。否则,只需在继续之前修改返回的文档即可。感谢@NeilLunn的期待和建议我知道如何使用map、async和forEach等操作json数组。我只想知道mongodbOkay是否有任何解决方案。。所以使用mongoose mapReduce格式是有限的,我需要在find方法中使用它,并且我必须独立处理其他文件fields@RatanUdayKumar是的,格式有点限制,是的,您需要定义其他字段。另一种方法是使用mongoose中间件,但它同样涉及循环。我正在寻找一种方法,将$dateToString和$month一起使用,以生成所需的格式。
 db.customers.aggregate([      
     {$project: 
         {yearMonthDayUTC: 
             {$dateToString: 
               {format: "%Y-%m-%d", 
                date: "$date" 
               } 
             },
         }
      }
    ])
 db.sales.insert({  "_id" : 4,   "item" : "mansi",   "price" : 10,   "quantity" : 2,   "date" : new Date(Date.now())  })