Spaces:
Running
Running
import type { Migration } from "."; | |
import { getCollections } from "$lib/server/database"; | |
import { ObjectId, type AnyBulkWriteOperation } from "mongodb"; | |
import type { Assistant } from "$lib/types/Assistant"; | |
import { generateSearchTokens } from "$lib/utils/searchTokens"; | |
const migration: Migration = { | |
_id: new ObjectId("5f9f3e3e3e3e3e3e3e3e3e3e"), | |
name: "Update search assistants", | |
up: async (client) => { | |
const { assistants } = getCollections(client); | |
let ops: AnyBulkWriteOperation<Assistant>[] = []; | |
for await (const assistant of assistants | |
.find() | |
.project<Pick<Assistant, "_id" | "name">>({ _id: 1, name: 1 })) { | |
ops.push({ | |
updateOne: { | |
filter: { | |
_id: assistant._id, | |
}, | |
update: { | |
$set: { | |
searchTokens: generateSearchTokens(assistant.name), | |
}, | |
}, | |
}, | |
}); | |
if (ops.length >= 1000) { | |
process.stdout.write("."); | |
await assistants.bulkWrite(ops, { ordered: false }); | |
ops = []; | |
} | |
} | |
if (ops.length) { | |
await assistants.bulkWrite(ops, { ordered: false }); | |
} | |
return true; | |
}, | |
down: async (client) => { | |
const { assistants } = getCollections(client); | |
await assistants.updateMany({}, { $unset: { searchTokens: "" } }); | |
return true; | |
}, | |
}; | |
export default migration; | |