graphql-anywhere-mongodb
Version:
Use graphql to query mongodb
80 lines • 3.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const util = require("util");
const log_1 = require("./log");
// Helper to print args to mongodb for debug purposes
const json = (args) => util.inspect(args, { depth: Infinity, breakLength: Infinity, colors: true });
/**
* Executes queries against multiple collections and returns all of their results.
*
* @param connection The mongodb connection.
* @param queryInfos An array of {MongoQueryInfo} to execute.
* @return {Promise<GraphQLExecutionResult[]>} The results of running all of the queries.
*/
function findMultiple(connection, queryInfos) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return yield Promise.all(queryInfos.map(query => findAll(connection, query)));
});
}
exports.findMultiple = findMultiple;
/**
* Executes a single findOne query for the passed {MongoQueryInfo}.
* @param connection The mongodb connection.
* @param queryInfo The query {MongoQueryInfo} to execute.
* @return {Promise<GraphQLExecutionResult>} The results of running the query.
*/
function findOne(connection, queryInfo) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const collection = yield connection.collection(queryInfo.collection);
const collectionName = collection.collectionName;
try {
log_1.log(`Executing ${collectionName}.findOne(${json(queryInfo.query)}, ${json(queryInfo.fields)})`);
const document = yield collection.findOne(queryInfo.query, {
fields: queryInfo.fields,
});
return {
collection: collectionName,
results: document,
error: null,
};
}
catch (err) {
return {
collection: collectionName,
results: null,
error: err,
};
}
});
}
exports.findOne = findOne;
function findAll(connection, queryInfo) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const collection = yield connection.collection(queryInfo.collection);
const collectionName = collection.collectionName;
const hasSort = Object.keys(queryInfo.sort).length > 0;
try {
log_1.log(`Executing ${collectionName}.find(${json(queryInfo.query)}, ${json(queryInfo.fields)})` +
(!hasSort ? '' : `.sort(${json(queryInfo.sort)})`));
const cursor = collection.find(queryInfo.query, queryInfo.fields, queryInfo.skip, queryInfo.limit);
const results = hasSort
? yield cursor.sort(queryInfo.sort).toArray()
: yield cursor.toArray();
return {
collection: collectionName,
results: results,
error: null,
};
}
catch (err) {
return {
collection: collectionName,
results: [],
error: err,
};
}
});
}
exports.findAll = findAll;
//# sourceMappingURL=mongo-queries.js.map