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