mongodb-rag-core
Version:
Common elements used by MongoDB Chatbot Framework components.
76 lines • 3.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeMongoDbTransformedContentStore = void 0;
const MongoDbDatabaseConnection_1 = require("../MongoDbDatabaseConnection");
const assert_1 = require("assert");
const pageIdentity_1 = require("./pageIdentity");
function makeMongoDbTransformedContentStore({ connectionUri, databaseName, collectionName = "transformed_content", }) {
const { mongoClient, db, drop, close } = (0, MongoDbDatabaseConnection_1.makeMongoDbDatabaseConnection)({
connectionUri,
databaseName,
});
const transformedContentCollection = db.collection(collectionName);
return {
drop,
close,
metadata: {
databaseName,
collectionName,
},
async loadContent(args) {
const page = args?.page;
return await transformedContentCollection
.find(page ? (0, pageIdentity_1.pageIdentity)(page) : {})
.project({ _id: 0 })
.toArray();
},
async deleteContent({ page, dataSources, inverseDataSources = false }) {
const deleteResult = await transformedContentCollection.deleteMany({
...(page ? (0, pageIdentity_1.pageIdentity)(page) : undefined),
...(dataSources
? {
sourceName: {
[inverseDataSources ? "$nin" : "$in"]: dataSources,
},
}
: undefined),
});
if (!deleteResult.acknowledged) {
throw new Error("Deletion not acknowledged!");
}
},
async updateContent({ page, transformedContent }) {
(0, assert_1.strict)(transformedContent.length !== 0);
transformedContent.forEach((transformedContent) => {
(0, assert_1.strict)(transformedContent.sourceName === page.sourceName &&
transformedContent.url === page.url, `TransformedContent source/url (${transformedContent.sourceName} / ${transformedContent.url}) must match given page source/url (${page.sourceName} / ${page.url})!`);
});
await mongoClient.withSession(async (session) => {
await session.withTransaction(async () => {
// First delete all transformed content for the given page
const deleteResult = await transformedContentCollection.deleteMany((0, pageIdentity_1.pageIdentity)(page), { session });
if (!deleteResult.acknowledged) {
throw new Error("Deletion not acknowledged!");
}
// Insert the transformed content for the page
const insertResult = await transformedContentCollection.insertMany([...transformedContent], {
session,
});
if (!insertResult.acknowledged) {
throw new Error("EmbeddedContent insertion not acknowledged!");
}
const { insertedCount } = insertResult;
if (insertedCount !== transformedContent.length) {
throw new Error(`Expected ${transformedContent.length} inserted, got ${insertedCount}`);
}
});
});
},
async init() {
await transformedContentCollection.createIndex({ sourceName: 1 });
await transformedContentCollection.createIndex({ url: 1 });
},
};
}
exports.makeMongoDbTransformedContentStore = makeMongoDbTransformedContentStore;
//# sourceMappingURL=MongoDbTransformedContentStore.js.map