安装引用

  1. // 数据库
  2. var mongoose = require('mongoose')
  3. mongoose.set('useNewUrlParser', true);
  4. mongoose.set('useFindAndModify', false);
  5. mongoose.set('useCreateIndex', true);
  6. mongoose.connect("mongodb://127.0.0.1:27017/xyText", { useNewUrlParser: true });

表结构 Schema

  1. // 优惠卷
  2. const mongoose = require('mongoose')
  3. var schema = mongoose.Schema;
  4. var newSchema = new schema({
  5. title: String, //标题
  6. imgs: String, //活动封面
  7. school: String, //校区
  8. price: Number, //金额
  9. tTimes: Number, //到期时间
  10. userId: String, //用户id
  11. strot: Boolean, // 状态值 0未使用 1使用
  12. }, {
  13. collection: "", // 状态值
  14. timestamps: {
  15. createdAt: 'created',
  16. updatedAt: 'updated'
  17. }
  18. })
  19. const Coupons = mongoose.model("Coupons", newSchema, "coupons")
  20. module.exports = Coupons

添加静态方法

  1. Schema.statics = {
  2. fetch: function(cb) {
  3. return this
  4. .find({})
  5. .sort('meta.updateAt')
  6. .exec(cb)
  7. },
  8. findById: function(id, cb) {
  9. return this
  10. .findOne({
  11. _id: id
  12. })
  13. .exec(cb)
  14. }
  15. }

model - 文档操作

  • 查询 ```javascript model.find({}, callback);

//查询找到的第一个文档 model.findOne({}, callback);

//过滤查询 model.find({},field,callback);

//通过id查询 model.findById(‘obj._id’, callback);

//游标,过滤查询 model.findById(‘obj._id’, callback).sort(0).limit(10);

  1. - 创建
  2. ```javascript
  3. Model.create('obj', callback))
  • 更新
Model.update('key', 'obj', callback)

// 查询id更新
Model.findByIdAndUpdate('id', 'obj', callback)
  • 删除
Model.remove('key',callback);

更新修改器

  • ‘$inc’增减修改器,只对数字有效.下面的实例: 找到 age=22的文档,修改文档的age值自增1
 Model.update({
    'age': 22
}, {
    '$inc': {
        'age': 1
    }
});
  • ‘$set’ 指定一个键的值,这个键不存在就创建它.可以是任何MondoDB支持的类型.
 Model.update({
    'age': 22
}, {
    '$set': {
        'age': 'haha'
    }
});
  • ‘$unset’ 同上取反,删除一个键
Model.update({
    'age': 22
}, {
    '$unset': {
        'age': 'haha'
    }
});

数组修改器

  • ‘$push’ 给一个键push一个数组成员,键不存在会创建
 Model.update({
    'age': 22
}, {
    '$push': {
        'array': 10
    }
});
  • ‘$addToSet’ 向数组中添加一个元素,如果存在就不添加
 Model.update({
     'age': 22
 }, {
     '$addToSet': {
         'array': 10
     }
 });
  • ‘$each’ 遍历数组, 和 $push 修改器配合可以插入多个值
 Model.update({
    'age': 22
}, {
    '$push': {
        'array': {
            '$each': [1, 2, 3, 4, 5]
        }
    }
});
  • ‘$pop’ 向数组中尾部删除一个元素
 Model.update({
    'age': 22
}, {
    '$pop': {
        'array': 1
    }
});
  • ‘$pull’ 向数组中删除指定元素
Model.update({
    'age': 22
}, {
    '$pull': {
        'array': 10
    }
});

条件查询

  • “$lt” 小于
  • “$lte” 小于等于
  • “$gt” 大于
  • “$gte” 大于等于
  • “$ne” 不等于
 Model.find({
     "age": {
         "$gte": 18,
        "$lte": 30
    }
});

或查询 or

  • ‘$in’ 一个键对应多个值
  • ‘$nin’ 同上取反, 一个键不对应指定值
  • “$or” 多个条件匹配, 可以嵌套 $in 使用
  • “$not” 同上取反, 查询与特定模式不匹配的文档
Model.find({
    "age": {
        "$in": [20, 21, 22.' haha']
    }
});
//查询 age等于20或21或21或'haha'的文档

Model.find({
    "$or": [{
        "age": 18
    }, {
        "name": "xueyou"
    }]
});
//查询 age等于18 或 name等于'xueyou' 的文档

类型查询

  • null 能匹配自身和不存在的值, 想要匹配键的值 为null, 就要通过 “$exists” 条件判定键值已经存在“$exists” (表示是否存在的意思) ```javascript Model.find(“age”: { “$in”: [null], “exists”: true }, function(error, docs) { //查询所有不存在telephone属性的文档 }); //查询 age值为null的文档

Model.find({ name: { $exists: true } }, function(error, docs) { //查询所有存在name属性的文档 });

Model.find({ telephone: { $exists: false } }, function(error, docs) { //查询所有不存在telephone属性的文档 });


<a name="KkEHi"></a>
#### 正则表达式

- MongoDb 使用 Prel兼容的正则表达式库来匹配正则表达式

```javascript
find({
     "name": /joe/i
})
//查询name为 joe 的文档, 并忽略大小写

find({
     "name": /joe?/i
})
//查询匹配各种大小写组合

查询数组

Model.find({
    "array": 10
});
//查询 array(数组类型)键中有10的文档,  array : [1,2,3,4,5,10]  会匹配到

 Model.find({
     "array[5]": 10
});
//查询 array(数组类型)键中下标5对应的值是10,  array : [1,2,3,4,5,10]  会匹配到

  • ‘$all’ 匹配数组中多个元素
 Model.find({
     "array": [5, 10]
});
//查询 匹配array数组中 既有5又有10的文档
  • ‘$size’ 匹配数组长度
 Model.find({
     "array": {
        "$size": 3
    }
});
//查询 匹配array数组长度为3 的文档
  • ‘$slice’ 查询子集合返回
Model.find({
     "array": {
        "$skice": 10
    }
});
//查询 匹配array数组的前10个元素

 Model.find({
     "array": {
        "$skice": [5, 10]
    }
});
//查询 匹配array数组的第5个到第10个元素

where

  • 用它可以执行任意javacript语句作为查询的一部分,如果回调函数返回 true 文档就作为结果的一部分返回
find({
    "$where": function() {
        for (var x in this) {
            //这个函数中的 this 就是文档
        }

        if (this.x !== null && this.y !== null) {
            return this.x + this.y === 10 ? true : false;
        } else {
            return true;
        }
    }
})

//简化

find({
    "$where": "this.x + this.y === 10"
})
find({
    "$where": " function(){ return this.x + this.y ===10; } "
})

游标:

  • limit(3) 限制返回结果的数量,
  • skip(3) 跳过前3个文档,返回其余的
  • sort( {“username”:1 , “age”:-1 } ) 排序 键对应文档的键名, 值代表排序方向, 1 升序, -1降序

参考