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()
中,您实际上可以根据需要添加查询(甚至更喜欢这样做。尤其是当您搜索索引字段时)。这将减少负载和一次更换的文档数量。
我对 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()
中,您实际上可以根据需要添加查询(甚至更喜欢这样做。尤其是当您搜索索引字段时)。这将减少负载和一次更换的文档数量。