Code Monkey home page Code Monkey logo

mongoosedao's Introduction

mongoose dao

mongoosedao = mongoose data access object

gitter NPM version Build Status Dependencies Status Coverage Status

Install

npm install --save mongoosedao

Usages

require('./db');

var User = require('./User');

User.create({"username":"sss","password":"password"},function(err, user){
  console.log(user);
});

User.delete({"username":"sss","password":"password"},function(err, user){
  console.log(user);
});

扩展

User.model is a mongoose model. You can do all as mongoose model。

more features

  • statics
  • methods
  • pre or post hook
  • aggregation

比如直接扩展方法

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Promise = require('bluebird');

var User = require('../app/models/user');

User.schema.statics.find_by_openid = function(openid, cb) {
  console.log('find_by_openid...')
};

// 此处必须要重置一下model
User = mongoose.model('User', User.schema);

var MongooseDao       = require('mongoosedao');

var UserDao = new MongooseDao(Test);

UserDao.model.find_by_openid({}, function(err,docs){
  // console.dir(docs);
  process.exit();
}); 

当然我们更推荐的是在model定义上直接加

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

 
UserSchema = new Schema({
  username: {
    type: String,
    required: true,
    index: {
      unique: true
    }
  },
  password: {
    type: String,
    required: true
  },
  avatar: String,
  address: String,
  created_at: {
    type: Date,
    "default": Date.now
  }
});

UserSchema.methods.find_by_name = function(cb) {
  return this.model('UserModel').find({
    username: this.username
  }, cb);
};

UserSchema.methods.is_exist = function(cb) {
  var query;
  query = {
    username: this.username,
    password: this.password
  };
  return this.model('UserModel').findOne(query, cb);
};

UserSchema.statics.delete_by_name = function(name, cb_succ, cb_fail) {};

var UserModel = mongoose.model('UserModel', UserSchema);

var MongooseDao = require('../../');

 
var MeetingDao = new MongooseDao(UserModel);
 
module.exports = MeetingDao;

只要mongoose支持的,使用mongoosedao都可以完成,甚至更好

API and Test

Test status

  • create
  • delete = remove
  • deleteAll = removeAll
  • deleteById = removeById
  • getById
  • all = getAll = find({})
  • query = getByQuery = find
  • one = findOne
  • update
  • updateOne
  • updateById
  • pageByLastId
  • top(num) && first(num) = n(num) = latest(num)
  • count(cb) &* count({},cb)

more see api doc

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

版本历史

  • v1.0.8 add mocha test && api.md
  • v1.0.5 add query with condition
  • v1.0.4 create with saved_doc return;
  • v1.0.3 add updateById
  • v1.0.2 add deleteById
  • v1.0.0 初始化版本

欢迎fork和反馈

如有建议或意见,请在issue提问或邮件

License

this repo is released under the MIT License.

mongoosedao's People

Contributors

catlite91 avatar i5ting avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

mongoosedao's Issues

关于coveralls请教一下

请问coveralls是基于travis的么?看到一些教程需要用到istanbul和travis是么?那如果少了他们其中一个,coveralls是不是就没办法测试coverage。那么istanbul能够测python的代码么

使用 pageByLastId 进行降序排序时发现一个问题

表结构

OperatingRecordSchema = new Schema({
  product_id: { // 商品ID
    type: Schema.ObjectId,
    required: true,
    index: true
  },
  product_name: String, //商品名称
  count: Number, // 商品的数量
  operator: String, //操作人
  operate_status: { // 操作状态【入库 0 | 出库 1 】
    type: Number,
    required: true
  },
  user_to_id: { // 收货人id  from contact
    type: Schema.ObjectId,
    index: true
  },
  user_to_name:String,
  user_to_address: String,
  user_to_phone: String,

  user_name: String, //发货人姓名
  user_id: { // 用户的id
    type: Schema.ObjectId,
    // required: true,
    index: true
  },
  created_at: {
    type: Date,
    default: Date.now
  }
});

现在数据库有10条数据(按顺序创建的)

PageSize为5, 根据 created_at 升序排序时一切正常:

使用 top 第一次加载5条:

1
2
3
4
5  <-- last_index

点击加载更多(使用 pageByLastId 再加载5条):

1
2
3
4
5
6
7
8
9
10

当根据 created_at 降序排序时:

使用 top 第一次加载5条:

10
9
8
7
6  <-- last_index

点击加载更多(使用 pageByLastId 再加载5条)出现了问题:

排序变成了这样:

10
9
8
7
6
10
9
8
7

这次使用 pageByLastId 只加载出了 4条数据,而且 10,9,8,7 重复地取出来了

populate

.populate('owner_detail').populate('owner_sources')

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.