update README
This commit is contained in:
		
							
								
								
									
										108
									
								
								docs/index.md
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								docs/index.md
									
									
									
									
									
								
							| @@ -1,19 +1,113 @@ | ||||
| # smartdata | ||||
| do more with data | ||||
|  | ||||
| smartdata is a ODM that adheres to TypeScript practices and uses classes to organize data. | ||||
| It uses MongoDB as persistent storage. | ||||
| ## Availabililty | ||||
| [](https://www.npmjs.com/package/smartdata) | ||||
| [](https://GitLab.com/pushrocks/smartdata) | ||||
| [](https://github.com/pushrocks/smartdata) | ||||
| [](https://pushrocks.gitlab.io/smartdata/) | ||||
|  | ||||
| ## Status for master | ||||
| [](https://GitLab.com/pushrocks/smartdata/commits/master) | ||||
| [](https://GitLab.com/pushrocks/smartdata/commits/master) | ||||
| [](https://www.npmjs.com/package/smartdata) | ||||
| [](https://david-dm.org/pushrocks/smartdata) | ||||
| [](https://www.bithound.io/github/pushrocks/smartdata/master/dependencies/npm) | ||||
| [](https://www.bithound.io/github/pushrocks/smartdata) | ||||
| [](https://nodejs.org/dist/latest-v6.x/docs/api/) | ||||
| [](https://nodejs.org/dist/latest-v6.x/docs/api/) | ||||
| [](http://standardjs.com/) | ||||
|  | ||||
| ## Usage | ||||
| Use TypeScript for best in class instellisense. | ||||
|  | ||||
| smartdata is an ODM that adheres to TypeScript practices and uses classes to organize data. | ||||
| It uses MongoDB or NeDb as persistent storage. | ||||
|  | ||||
| ## Intention | ||||
| There are many ODMs out there, however when we searched for a ODM that uses TypeScript, | ||||
| acts smart while still embracing an easy the NoSQL idea we didn't find a matching solution. | ||||
| This is why we started smartdata | ||||
| There are many ODMs out there, however when we searched for an ODM that uses TypeScript, | ||||
| acts smart while still embracing the NoSQL idea we didn't find a matching solution. | ||||
| This is why we started smartdata. | ||||
|  | ||||
| How MongoDB terms map to smartdata classes | ||||
|  | ||||
| MongoDB term | smartdata class | ||||
| --- | --- | ||||
| Database | smartdata.DbConnection | ||||
| Database | smartdata.Db | ||||
| Collection | smartdata.DbCollection | ||||
| Document | smartdata.DbDoc | ||||
|  | ||||
| [](https://push.rocks) | ||||
| ### class Db | ||||
| represents a Database. Naturally it has .connect() etc. methods on it. | ||||
| Since it is a class you can have multiple DBs defined. | ||||
| ```javascript | ||||
| import * as smartdata from 'smartdata' | ||||
|  | ||||
| // mongodb | ||||
| let myDb1 = new smartdata.Db('someConnectionUrl') | ||||
| let myDb2 = new smartdata.Db('someConnectionUrl') | ||||
|  | ||||
| // nedb | ||||
| let myDb3 = new smartdata('/some/path/for/persistence', 'nedb') // you may set first argument to null for just in memory db | ||||
|  | ||||
| myDb1.connect() | ||||
| myDb2.connect() | ||||
|  | ||||
| // continues in next block...  | ||||
| ``` | ||||
|  | ||||
| ### class DbCollection | ||||
| represents a collection of objects. | ||||
| A collection is defined by the object class (that is extending smartdata.dbdoc) it respresents | ||||
|  | ||||
| So to get to get access to a specific collection you document | ||||
| ```javascript | ||||
| // continues from the block before... | ||||
|  | ||||
| @Collection(myDb1) | ||||
| class myObject extends smartdata.DbDoc<myObject> { // read the next block about DbDoc | ||||
|     @smartdata.svDb() property1: string // @smartdata.svDb() marks the property for db save | ||||
|     property2: number // this one is not marked, so it won't be save upon calling this.save()  | ||||
|     constructor(optionsArg:{ | ||||
|         property1: string, | ||||
|         property2: number | ||||
|     }) { | ||||
|         super() | ||||
|     } | ||||
| } | ||||
| let myCollection = myDb1.getCollectionByName<myObject>(myObject) | ||||
|  | ||||
| // start to instantiate classes from scratch or database | ||||
| ```  | ||||
|  | ||||
| > Alert: You NEVER instantiate a collection. | ||||
| This is done for you!!! | ||||
|  | ||||
| ### class DbDoc | ||||
| represents a individual document in a collection | ||||
| and thereby is ideally suited to extend the class you want to actually store. | ||||
|  | ||||
| DbDoc extends your class with the following methods: | ||||
|  | ||||
| * `.save()` will save (or update) the object you call it on only. Any referenced non-savable objects will not get stored. | ||||
| * `.saveDeep()` does the same like `.save()`. | ||||
|   In addition it will look for properties that reference an object | ||||
|   that extends DbDoc as well and call .saveDeep() on them as well. | ||||
|   Loops are prevented | ||||
|  | ||||
| So now we can **store** instances of classes to Db... | ||||
| How do we **get** a new class instance from a Doc in the DB? | ||||
|  | ||||
| ## TypeScript | ||||
| How does TypeScript play into this? | ||||
| Since you define your classes in TypeScript and types flow through smartdata in a generic way | ||||
| you should get all the Intellisense and type checking you love when using smartdata. | ||||
| smartdata itself also bundles typings. | ||||
| So you don't need to install any additional types when importing smartdata. | ||||
|  | ||||
| For further information read the linked docs at the top of this README. | ||||
|  | ||||
| > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) | ||||
| | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) | ||||
|  | ||||
| [](https://push.rocks) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user