到目前为止,MongoDB中的字符串是shell还是PyMongo

时间:2017-10-19 11:18:33

标签: mongodb pymongo mongo-shell

我是MongoDB及其查询的新手,但目前我无法从字符串更改集合中的“列”。

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

MongoDB Compass

我通过这里的线程尝试了几个东西,但它似乎没有用。我知道我可以通过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);
}

1 个答案:

答案 0 :(得分: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()内,您可以实际添加查询(如果您愿意的话)(尤其是您搜索索引字段时)。这样可以减少一次性更换的负载和文件数量。