UNPKG

blow-data-service

Version:

Observable data service for Blow.

73 lines (72 loc) 2.09 kB
'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;