more work
This commit is contained in:
parent
7a99d08d04
commit
b87a931a2b
11 changed files with 595 additions and 183 deletions
78
run-price-migration.js
Normal file
78
run-price-migration.js
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
// This script performs the migration of lastPriceUpdate and lastPriceDate fields
|
||||
// to the operations tracking system
|
||||
|
||||
// Since authentication is required, you'll need to run this script with proper MongoDB credentials
|
||||
// Update the connection string below with your authentication details
|
||||
|
||||
const MONGODB_URI = 'mongodb://username:password@localhost:27017/stock?authSource=admin';
|
||||
// Or use environment variable: process.env.MONGODB_URI
|
||||
|
||||
async function runMigration() {
|
||||
console.log(`
|
||||
========================================
|
||||
PRICE TRACKING MIGRATION SCRIPT
|
||||
========================================
|
||||
|
||||
This script will migrate lastPriceUpdate and lastPriceDate fields
|
||||
from eodSymbols collection to the operations tracking system.
|
||||
|
||||
To run this migration:
|
||||
|
||||
1. Update the MONGODB_URI in this file with your MongoDB credentials
|
||||
OR set the MONGODB_URI environment variable
|
||||
|
||||
2. Run the script:
|
||||
node run-price-migration.js
|
||||
|
||||
The script will:
|
||||
- Find all documents with lastPriceUpdate field
|
||||
- Convert dates to normalized format (00:00:00 UTC)
|
||||
- Create operations.price_update structure
|
||||
- Process in batches of 1000 documents
|
||||
|
||||
Total documents to migrate: ~199,175
|
||||
|
||||
Migration query that will be executed:
|
||||
`);
|
||||
|
||||
console.log(`
|
||||
db.eodSymbols.find({
|
||||
lastPriceUpdate: { $exists: true },
|
||||
'operations.price_update': { $exists: false }
|
||||
}).forEach(doc => {
|
||||
const normalizedDate = new Date(doc.lastPriceUpdate);
|
||||
normalizedDate.setUTCHours(0, 0, 0, 0);
|
||||
|
||||
let lastRecordDate = null;
|
||||
if (doc.lastPriceDate) {
|
||||
try {
|
||||
lastRecordDate = new Date(doc.lastPriceDate);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
db.eodSymbols.updateOne(
|
||||
{ _id: doc._id },
|
||||
{
|
||||
$set: {
|
||||
'operations.price_update': {
|
||||
lastRunAt: normalizedDate,
|
||||
lastSuccessAt: normalizedDate,
|
||||
status: 'success',
|
||||
...(lastRecordDate && { lastRecordDate })
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
`);
|
||||
|
||||
console.log(`
|
||||
After migration, you can optionally remove old fields:
|
||||
db.eodSymbols.updateMany({}, { $unset: { lastPriceUpdate: '', lastPriceDate: '' } })
|
||||
|
||||
To verify migration:
|
||||
db.eodSymbols.findOne({ 'operations.price_update': { $exists: true } })
|
||||
`);
|
||||
}
|
||||
|
||||
runMigration();
|
||||
Loading…
Add table
Add a link
Reference in a new issue