资讯专栏INFORMATION COLUMN

mongoose(猫鼬)

ephererid / 1129人阅读

摘要:比如现在是第页,就跳过前页乘以每页条。按降序排序更新查询条件更改项目第三个参数设为只更新一个文档。更改文档某一条些数据再调用方法也可更新。删除查询条件其他常用的增删改查解读的一切都是从开始的。每个映射到集合,并定义该集合中的数据格式类型。

mongoose@5.2.13 快速入门
const mongoose = require("mongoose");

/* 连接数据库 */
mongoose.connect("mongodb://localhost/mytest", {useNewUrlParser: true}); // 如果没有mytest这个数据库,则会自行创建
let db = mongoose.connection;
// 如果连接发生错误
db.on("error", ()=>{console.error("连接错误")});
// 如果连接成功
db.once("open", ()=>{console.log("已经连接")});

/* 注册一个集合kittens */
let kittySchema = new mongoose.Schema({
    name: String,
    age: Number
});
// 添加方法,被编译到Model原型并在每个文档实例上公开
kittySchema.methods.talk = function(){
    let greeting = this.name || "我还没有名字";
    console.log(`我叫${greeting}`);
};
let Kitten = mongoose.model("kittens", kittySchema);

/* 创建kittens集合的文档(实例,即一条数据)*/
let silence = new Kitten({
    name: "silence",
    age: 1
});
// console.log(silence); 会自动加一个 _id 的属性

let fluffy = new Kitten({
    name: "fluffy",
    age: .5
});

// 存到MongoDB上
silence.save();
fluffy.save((err, result)=>{
    if(err)return;
    fluffy.talk();
});
查询

第一个参数是查询条件,第二个参数指定结果输出的项目(可省略,就是全部输出)。

Kitten.find({name: /^flu/}, {name: 1, _id: 0},(err, result)=>{
    if(err)return;
    console.log(result);
})
基础查询
Kitten.findOne()
利用id的唯一性查询
Kitten.findById(_id,callback)
利用正则表达式模糊查询
let findCondition = {
    name: {
        $regex: /si/i
    }
}
其他条件
{
    age: {
        $gte: 18 // age >= 18
    }
}

$or或关系

$nor或关系取反

$gt大于

$gte大于等于

$lt小于

$lte小于等于

$ne不等于

$in在多个值范围内

$nin不在多个值范围内

$all匹配数组中多个值

$regex正则,用于模糊查询

$size匹配数组大小

$maxDistance范围查询,距离(基于LBS)

$mod取模运算

$near邻域查询,查询附近的位置(基于LBS)

$exists字段是否存在

$elemMatch匹配内数组内的元素

$within范围查询( 基于LBS)

$box范围查询,矩形范围(基于LBS)

$center范围醒询,圆形范围(基于LBS)

$centerSphere范围查询,球形范围(基于LBS) 

$slice查询字段集合中的元素(比如从第几个之后,第N到第M个元素)

查询数量
Kitten.count({/* 查询条件 */},(err,num)=>{})
分页查询(important)
let findCondition = {}; // 查询条件
let pageSize = 10; // 每页多少条
let currPage = 5; // 当前是多少页
let skipNum = (currPage-1)*pageSize; // 跳过条数。比如现在是第5页,就跳过前4页乘以每页10条。
let sort = {
    age: -1 // 按age降序排序
}
Kitten.find(findCondition,{_id:0,age:1,name:1})
      .skip(skipNum)
      .limit(pageSize)
      .sort(sort)
      .exec((err,result)=>{});
更新
Kitten.update({/*查询条件*/}, {/*更改项目*/}, {}, (err,res)=>{}); // 第三个参数设为`{multi: false}`只更新一个文档。

更改文档某一条(些)数据再调用save方法也可更新。

删除
Kitten.remove({/* 查询条件 */}, callback)
其他常用的增删改查api

Model.deleteMany()

Model.deleteOne()

Model.findById()

Model.findByIdAndDelete()

Model.findByIdAndRemove()

Model.findByIdAndUpdate()

Model.findOneAndDelete()

Model.findOneAndRemove()

Model.findOneAndUpdate()

Model.replaceOne()

Model.updateMany()

Model.updateOne()

解读Schema

mongoose的一切都是从Schema开始的。每个Scheam映射到MongoDB集合,并定义该集合中 documnet 的数据格式类型。

https://mongoosejs.com/docs

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19298.html

相关文章

  • 在Node中基于Mongoose对MongoDB进行增删查改(CRUD)操作(一)

    摘要:如图连接成功后,显示你的数据库,在这个节目可以对数据库进行操作。如图安装与加载首先假定你已经安装了,命令行工具输入在使用的文件中即可。创建读取更新删除单值读取上文是在中基于对进行增删查改操作的简单介绍,以后会有进阶的文章。 关键词:mongodb安装 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查询,增加,修改,删除 工具介绍 Mon...

    lemon 评论0 收藏0
  • 在Node中基于Mongoose对MongoDB进行增删查改(CRUD)操作(一)

    摘要:如图连接成功后,显示你的数据库,在这个节目可以对数据库进行操作。如图安装与加载首先假定你已经安装了,命令行工具输入在使用的文件中即可。创建读取更新删除单值读取上文是在中基于对进行增删查改操作的简单介绍,以后会有进阶的文章。 关键词:mongodb安装 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查询,增加,修改,删除 工具介绍 Mon...

    SillyMonkey 评论0 收藏0
  • mongodb数据库的使用

    最近在学习node,所以听说node和mongodb更配哦。。所以我就来学习mongodb了showImg(https://segmentfault.com/img/remote/1460000006818697); 一、mongodb的开启和关闭 1. 查找mongod是否可用 which mongod 2. 启动mongodb 指定path 和log日志 mongod --dbpath /...

    刘玉平 评论0 收藏0

发表评论

0条评论

ephererid

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<