【问题标题】:String to date in MongoDB either shell or PyMongoMongoDB shell 或 PyMongo 中的迄今为止的字符串
【发布时间】:2017-10-19 11:18:32
【问题描述】:

我对 MongoDB 及其查询非常陌生,但目前,我无法将集合中的“列”从字符串更改为日期。

我的数据库和集合都称为 thdr。我想将“PSTNG_DATE”列更改为日期格式。目前格式为“19.10.2017”。

我浏览了这里的线程并尝试了一些东西,但它似乎不起作用。我知道我可以通过 MongoDB Shell 或使用 PyMongo 来更改它。

非常感谢您的帮助和指导,非常感谢。

** 更新 ** 这就是我目前所拥有的,它给了我语法错误

db = db.getSiblingDB('thdr');
var requests = [];
db.thdr.find().forEach(doc => { 
    var date = yourFunctionThatConvertsStringToDate(doc.PSTNG_DATE);
    requests.push( { 
        'updateOne': {
            'filter': { '_id': doc._id },
            'update': { '$set': {  
                "PSTNG_DATE": date
            } }
        }
    });
    if (requests.length === 500) {
        db.thdr.bulkWrite(requests);
        requests = [];
    }
});

if(requests.length > 0) {
    db.thdr.bulkWrite(requests);
}

【问题讨论】:

标签: mongodb pymongo mongo-shell


【解决方案1】:

您可以使用 bulkWrite 来做到这一点:

db = db.getSiblingDB('yourDatabaseName');
var requests = [];
db.yourCollectionName.find().forEach(doc => { 
var strDate = doc.PSTNG_DATE; 
var dateParts = strDate.split("."); 
var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
    requests.push( { 
        'updateOne': {
            'filter': { '_id': doc._id },
            'update': { '$set': {  
                "PSTNG_DATE": date
            } }
        }
    });
    if (requests.length === 500) {
        db.yourCollectionName.bulkWrite(requests);
        requests = [];
    }
});

if(requests.length > 0) {
     db.yourCollectionName.bulkWrite(requests);
}

您必须更新每个文档。因此,您可以将updateOne() 集合方法添加到数组(requests)并在bulkWrite(...) 中执行它们,而不是对每个文档进行更新 按照此处https://docs.mongodb.com/manual/reference/method/load/ 的描述将脚本直接加载到您的 mongodb 服务器上并在那里执行。希望这会有所帮助。

仅供参考:在find() 中,如果您愿意,您实际上可以添加一个查询(它甚至更受欢迎。尤其是当您搜索索引字段时)。这将减少负载和一次替换的文档数量。

【讨论】:

  • 将 db 名称更改为 thdr,将脚本粘贴到 .js 文件中,并在 mongo shell 中使用 load 方法。我收到语法错误。 > load(C:\Users\me\Desktop\asd\update2.js) 2017-10-19T15:53:15.917+0200 E QUERY [thread1] SyntaxError: malformed Unicode character escape sequence @(shellhelp1):1:24 error2:SyntaxError: malformed Unicode character escape sequence @(shellhelp1):1: 24
  • 你可能忘记了这个“?load("C:\Users\me\Desktop\asd\update2.js")
  • 我已经用修改后的 .js 更新了帖子,使用“没有做到这一点
  • yourFunctionThatConvertsStringToDate 是您必须创建的函数的示例名称。让我为你更新我的答案,这样更清楚。
  • 耶,我是这么想的。老实说,我不知道该怎么做。
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多