【问题标题】:How to convert string to Date in mongodb?如何在mongodb中将字符串转换为日期?
【发布时间】:2020-02-05 11:59:09
【问题描述】:

我在stackoverflow 中找到了很多答案,但没有什么能解决我的问题。我有collection,看起来像这样

#DB Name: test 
#Collection Name: firstcollection

{ 
    "_id" : ObjectId("5d8b51e80eeb1c27ce119e52"), 
    "url" : "http://192.168.1.37/second.html", 
    "browser" : "Netscape", 
    "uniqueId" : "dd0c76b1-77c7-445a-8bcd-e58cb239507e", 
    "ip" : " 162.158.166.103", 
    "date" : "25/09/2019 16:37:56"
}
// ----------------------------------------------
{ 
    "_id" : ObjectId("5d8b51e80eeb1c27ce119e62"), 
    "url" : "http://192.168.1.37/second.html", 
    "browser" : "Netscape", 
    "uniqueId" : "c3a3c5f8-23a8-4626-9b43-b5a95fb02597", 
    "ip" : " 172.69.134.115", 
    "date" : "25/09/2019 16:38:13"
}

在这里,我想将我的date 格式为String 转换为Date 格式。我试过这段代码

> db.firstcollection.aggregate([
...     {$project:{ date:{$dateFromString:{dateString:'$date'}}}}
... ])

但它显示错误

assert: command failed: {
    "ok" : 0,
    "errmsg" : "Error parsing date string '25/09/2019 16:37:56'; 0: Unexpected character '2'",
    "code" : 40553,
    "codeName" : "Location40553"
} : aggregate failed
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:16:14
assert.commandWorked@src/mongo/shell/assert.js:403:5
DB.prototype._runAggregate@src/mongo/shell/db.js:260:9
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1212:12
@(shell):1:1

我也试过了,但没有显示格式参数

db.firstcollection.aggregate([
    { "$addFields": {
        "date": { 
            "$dateFromString": { 
                "dateString": "$date",
                "format": "%d-%m-%Y %H%M%S" 
            } 
        }
    } }
])

我发现MongoDB 3.6 已经从这个dateFromString 中删除了format 参数answer所以我不能指定格式。

我也对 MongoDB 3.6 的手册感到困惑

在第一个 3.6 手动链接中,它说有格式参数 First Manual Link 在另一个 3.6 手动链接中,它说没有格式参数 Second Manual Link

所以我不知道如何解决这个问题。建议我一些解决方案,将MongoDB 中的string 转换为date。我想使用指定的from and to date 从 MongoDB 获取数据。由于它是字符串,我无法获得正确的数据。帮我解决一些问题

【问题讨论】:

  • 使用%Y 说明符而不是%G,因为它代表ISO 8601mongoplayground.net/p/OcXrs4gY9Es
  • @Ashh,它显示Unrecognized argument to $dateFromString: format"
  • @Ashh,还有其他解决方法吗?
  • 升级到 4 及以上可以提供帮助。没有比这更重要的了。

标签: mongodb mongoose mongodb-query mongoid pymongo


【解决方案1】:

你已经用 pymongo 标记了这个,下面是一个快速的方法:

from pymongo import MongoClient
import datetime

db = MongoClient()['testdatabase']

db.testcollection.insert_one({
    "url" : "http://192.168.1.37/second.html",
    "browser" : "Netscape",
    "uniqueId" : "dd0c76b1-77c7-445a-8bcd-e58cb239507e",
    "ip" : " 162.158.166.103",
    "date" : "25/09/2019 16:37:56"
})
db.testcollection.insert_one({
    "url" : "http://192.168.1.37/second.html",
    "browser" : "Netscape",
    "uniqueId" : "c3a3c5f8-23a8-4626-9b43-b5a95fb02597",
    "ip" : " 172.69.134.115",
    "date" : "25/09/2019 16:38:13"
})

for item in db.testcollection.find():
    if 'date' in item:
        item['date'] = datetime.datetime.strptime(item['date'], '%d/%m/%Y %H:%M:%S')
        db.testcollection.replace_one({'_id': item['_id']}, item)

结果:

> db.testcollection.find({}, {'_id': 0}).pretty()
{
        "url" : "http://192.168.1.37/second.html",
        "browser" : "Netscape",
        "uniqueId" : "dd0c76b1-77c7-445a-8bcd-e58cb239507e",
        "ip" : " 162.158.166.103",
        "date" : ISODate("2019-09-25T16:37:56Z")
}
{
        "url" : "http://192.168.1.37/second.html",
        "browser" : "Netscape",
        "uniqueId" : "c3a3c5f8-23a8-4626-9b43-b5a95fb02597",
        "ip" : " 172.69.134.115",
        "date" : ISODate("2019-09-25T16:38:13Z")
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
相关资源
最近更新 更多