Mongoose 学习笔记

之前写的用 koa 开发 REST API,有提到过这个总让我想起加拿大鹅的中间件,索性好好学习一下。

准备工作

连接数据库

新建文件 serv.js,并输入一下代码

const mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1:27017/testdb");
let db = mongoose.connection;
db.on("error", function (error) {
    console.log("fail--->" + error);
});
db.on("open", function () {
    console.log("connected");
});

执行该文件 node serv.js,可以得到正确或错误的信息。

注意:如果你的 mongodb 版本较高,则会出现下面的警告

DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

解决办法,只要将

mongoose.connect("mongodb://127.0.0.1:27017/testdb");

改成

mongoose.connect("mongodb://127.0.0.1:27017/testdb", {useNewUrlParser: true});

即可。

Schema,Model和Entity

数据库的几个操作:增删改查

查询中的条件符号

$gt 大于 (>),格式为 {"age":{"$gt":1}}

$gte 大于等于 (>=),格式为 {"age":{"$gte":1}}

$lt 小于 (<),格式为 {"age":{"$lt":1}}

$lte 小于等于 (<=),格式为 {"age":{"$lte":1}}

{"age":{"$gt":1,"$lt":2} 则表示大于 1 小于 2

$ne 不等于 (!=),格式为 {name:{$ne:"tcoder"}}

和上面结合的多个条件则形如 {name:{$ne:"tcoder"}, age:{"$lte":1}}

$in 包含,格式为 {age:{$in:[1,2]}},表示包含 1 和 2 的,也可以是单独一个

$or 或者,满足一个条件即可,格式为 {"$or":[{"name":"tcoder"},{"age":1}]},这里的条件应该是数组形式

$exists 是否存在,格式为 {age:{$exists:true}},查看所有 age 存在的文档

所有的条件的查询格式如下

```
let condition = "待查询的状态"
tempModel.find(condition,function(error,data){
  console.log(data)
});
```

游标

有时候查询结果的数量庞大,会需要对结果进行操作,这就要用到 limit 函数,格式为 Model.find(查询条件,过滤条件(可为 null ),{limit函数体}, 回调);,比如要查询 10 条数据,则

tempModel.find({},null,{limit:10},function(error,data){
    console.log(data);
});

和 limit 有同样作用的是 skip 函数,但不同的是,如果数量少于 skip 的数量,则不会显示内容

tempModel.find({},null,{skip:2},function(error,data){
    console.log(data);
});

既然要处理多个结果中的一部分内容,势必就需要用到排序功能,sort 函数就是用来做排序的,格式和上面差不多,Model.find(查询条件,过滤条件,{sort函数体},回调),比如要按 age 升序排列

tempModel.find({},null,{sort:{age:1}},function(error,data){
    console.log(data);
});

其中 1 表示是升序,-1 表示是降序。

mongoDB 操作

推荐阅读

[1] https://github.com/Automattic/mongoose/issues/6880

[2] https://mongoosejs.com/docs/guide.html

© 2008 - 2021 · TOURCODER.COM ·