我最近遇到了同样的问题,想要添加一些额外的信息。
您可以通过两种方式插入日期:
- 在nodejs服务器端创建(例如,在ExpressJS脚本中)
示例:插入一个新对象并打上时间戳
db.collection('mycollection').findOneAndUpdate({'name': req.body.name}, {
$setOnInsert: {
'name': req.body.name,
'date_added': new Date()
}
}, {
upsert: true
}, (err, result) => {
if(err) return res.send(err);
res.send(result);
});
- 从JS客户端创建并通过REST API以JSON对象的形式通过POST请求发送到服务器端
示例:
fetch('addDate', {
method: 'post',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
'date_added': new Date()
})
})
对于1和2,您可以使用上面的答案中解释的
new Date('2014-01-22T14:56:59.301Z')
函数创建日期。区别在于,如果您像1中那样在服务器端使用MongoClient包进行操作,则会将其存储为MongoDB中的
ISODate('2014-01-22T14:56:59.301Z')
。如果您像2中那样在客户端进行操作,则以字符串形式存储:在MongoDB中为
'2014-01-22T14:56:59.301Z'
。
要查询ISODate对象,您需要使用
new Date('2014-01-22T14:56:59.301Z')
或
ISODate('2014-01-22T14:56:59.301Z')
。要查询字符串,只需使用该字符串:
'2014-01-22T14:56:59.301Z'
以下是使用mongo shell的一些查询示例:
存储为字符串的日期:
db.mycollection.findOne({date_added {$gte:'2018-06-22T00:07:53.688Z'}})
这会返回:
这会返回
{
"_id" : ObjectId("5b2c3dd90078ce3cd484ef21"),
"name" : "alfons",
"date_added" : "2018-06-22T00:07:53.688Z"
}
日期使用ISODate格式存储:
db.mycollection.findOne({date_added: {$lte: ISODate('2018-06-26T23:24:37.023Z')}})
或者使用"new Date"代替:
db.mycollection.findOne({date_added: {$lte: new Date('2018-06-26T23:24:37.023Z')}
这段代码返回以下结果:
{
"_id" : ObjectId("5b2bb21e1954b104e61ff735"),
"name" : "ceasar",
"date_added" : ISODate("2018-06-21T14:11:41.323Z")
}
new Date(Date.now()).toISOString()
- r3wt