all files / src/drivers/ mongodb.js

17.65% Statements 6/34
0% Branches 0/12
0% Functions 0/10
17.65% Lines 6/34
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73                                                                                                                                     
'use strict';
const rxjs_1 = require('rxjs');
const mongodb = require('mongodb');
exports.ObjectID = mongodb.ObjectID;
class MongoClient {
    static connect(url, options) {
        return rxjs_1.Observable.from(mongodb.MongoClient.connect(url, options))
            .map(db => new Db(db));
    }
}
exports.MongoClient = MongoClient;
class Db {
    constructor(db) {
        this._db = db;
    }
    collection(name) {
        return new Collection(this._db.collection(name));
    }
    close() {
        return rxjs_1.Observable.from(this._db.close());
    }
}
exports.Db = Db;
class Collection {
    constructor(collection) {
        this._collection = collection;
    }
    find(query) {
        query = Object.assign({}, { where: {} }, query || {});
        let cursor = this._collection.find(query.where);
        Object.keys(query).forEach(key => {
            if (key !== 'where') {
                cursor = cursor[key](query[key]);
            }
        });
        return rxjs_1.Observable.create(subscriber => {
            cursor.forEach(document => {
                subscriber.next(document);
            }, error => {
                if (error) {
                    subscriber.error(error);
                }
                subscriber.complete();
            });
        });
    }
    count(query) {
        query = query || {};
        return rxjs_1.Observable.from(this._collection.count(query));
    }
    delete(query) {
        query = query || {};
        return rxjs_1.Observable.from(this._collection.deleteMany(query));
    }
    insert(doc) {
        return rxjs_1.Observable.from(this._collection.insertOne(doc))
            .map(response => response['ops'][0]);
    }
    update(query, doc) {
        return rxjs_1.Observable.from(this._collection.updateOne(query, { $set: doc }))
            .map(response => {
            if (response['modifiedCount']) {
                doc._id = query._id.toString();
                return doc;
            }
            else {
                return null;
            }
        });
    }
}
exports.Collection = Collection;