MongoDB 中的最新字符串 shell 或 PyMongo

String to date in MongoDB either shell or PyMongo

我对 MongoDB 及其查询非常陌生,但目前,我无法将 collection 中的 'column' 从字符串更改为日期。

我的数据库和collection都叫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);
}

您可以使用 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(...) 中执行它们,而不是对每个文档进行更新 直接在您的 mongodb 服务器上加载此处 https://docs.mongodb.com/manual/reference/method/load/ 描述的脚本并在那里执行。希望这有帮助。

仅供参考:在 find() 中,您实际上可以根据需要添加查询(甚至更喜欢这样做。尤其是当您搜索索引字段时)。这将减少负载和一次更换的文档数量。