Skip to content

忘掉Mongoose吧,这是更优雅的Mongorito #14

Description

@isNeilLin

MongoDB安装

mac

# 进入 /usr/localcd /usr/local
# 下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.4.2.tgz
# 解压
sudo tar -zxvf mongodb-osx-x86_64-3.4.2.tgz
# 重命名为 mongodb 目录
sudo mv mongodb-osx-x86_64-3.4.2 mongodb
# 把安装目录/bin添加到 PATH 路径中export PATH=/usr/local/mongodb/bin:$PATH# 创建数据库存储目录 /data/dbcd /
sudo mkdir data
cd /data
sudo mkdir db
# 启动 mongodb,默认数据库目录即为 /data/db
sudo mongod
# 如果没有创建全局路径 PATH,需要进入以下目录cd /usr/local/mongodb/bin
sudo ./mongod

Mongorito

MongoDB ORM for Node based on Redux

安装

npm install mongorito --save
# or
yarn add mongorito

创建数据库连接

const{ Database }=require('mongorito');constdb=newDatabase('localhost/test');awaitdb.connect();

创建Model

//class “Model”没有任何属性和方法const{ Model }=require('mongorito');classPostextendsModel{}// 在数据库里注册 Modeldb.register(Post);

创建Document

// 创建一个Model的实例constpost=newPost();//or constpost=newPost({title: 'First Post',author: {name: 'Neil Lin',age: 23},content: 'This is content',created: Date.now()})

获取document中的字段

consttitle=post.get('title');constauthor=post.get('author.name')

更新

post.set('title','Second Post');post.set({author: {name: 'monica'},content: 'This content has already updated.'})awaitpost.save()

删除

// 删除单个字段post.unset('created');// 删除多个字段post.unset(['created','author.age'])awaitpost.save();// 删除documentawaitpost.remove();

自增字段

constpost=newPost({views: 0})awaitpost.increment('views');post.get('views');// => 1awaitpost.increment('views',2);post.get('views');// => 3

一次增加多个字段

constpost=newPost({views: 10,comments: 10})awaitpost.increment({views: 5,comments: 2})post.get('views')// => 15post.get('comments')// => 12

嵌套其他Model

classPostextendsModel{}classAuthorextendsModel{}classCommentsextendsModel{}Post.embeds('author',Author)Post.embeds('comments',Comments)constpost=newPost({title: 'Great post',author: newAuthor({name: 'Steve'}),comments: [newComment({body: 'Interesting!'})]})//orconstpost=newPost({title: 'Great post',author: {name: 'Steve'},comments: [{body: 'Interesting!'}]})awaitpost.save();

查询

// 查找全部postsawaitPost.find();// 查找�tag为"js"的postsawaitPost.find({tag: "js"});// orawaitPost.where({tag: "js"}).find();// 查找最近5条postsawaitPost.limit(5).sort('created','desc').find();// 查找其中一条awaitPost.findOne({title: 'First Post'});// 获取posts条数awaitPost.count({author: 'Neil Lin'});

插件

使用第三方插件

consttimestamp=require('mongorito-timestamps');db.use(timestamp({createdAt: 'created',// default 'created_at'updatedAt: 'updated'// default 'updated_at'}))// 或者只用于某个ModelPost.use(timestamp({createdAt: 'created',// default 'created_at'updatedAt: 'updated'// default 'updated_at'}))constpost=newPost({title: 'Hello'});awaitpost.save();post.get('created_at');//=> 2017-05-17T18:02:06.612Z

编写插件

constextendPost=Post=>{Post.Recently=function(){returnthis.limit(5).sort('created','desc').find();}Post.prototype.setTag=function(tag){this.set('tag',tag);}}Post.use(extendPost);constpost=newPost();post.setTag('mongodb');awaitpost.Recently();//=> [Post, Post, Post]

Metadata

Metadata

Assignees

No one assigned

    Labels

    服务端node,go等服务端语言

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions