node 关于 mongoose 使用

安装mongoose

npm i mongoose

创建连接

var mongoose = require("mongoose");
mongoose.set("useCreateIndex", true); // 新版本对索引的处理方式有所变化,无此代码会有警告
mongoose.connect("mongodb://localhost/test", {
  useNewUrlParser: true, // 新版本对连接字符串的解析有更好的支持,无此代码会有警告
  useUnifiedTopology: true, // 新版本对数据库的监事引擎有更好的支持,无此代码会有警告
});

mongoose.connection.on("open", () => {
  console.log("连接已打开");
});

定义Schema和Model

Schema组成ModelModel对应mongodb中的文档

我们需要先对其进行Schema定义,然后通过Schema定义模型

var userSchema = new mongoose.Schema({
  loginId: {
    type: String,//类型
    required: true,//是否必填
    unique: true,//是否唯一
    trim: true,//是否去除空格
    minlength: 3,//最小长度
    maxlength: 18,//最大长度
  },
  loginPwd: {
    type: String,
    required: true,
    trim: true,
    minlength: 6,
    maxlength: 18,
    select: false,
  },
});
//定义model
let User = mongoose.model("User", userSchema);

CRUD

新增

模型.create(对象)
  • 对象可以是单个对象或者是数组
  • 该操作是异步的,可以使用回调函数或ES7的await关键字得到新增的结果
  • 新增的对象会自动添加两个属性
    • _id:自动生成,用于表示文档的主键,全球唯一
    • __v:自动生成,用于表示文档的版本,内部维护,不需要开发者处理

查询

模型.findById(id); // 根据id字符串查询单个文档,若查找不到,则返回null
模型.find(filter, [projection], [options]); // 根据条件、投影、配置 进行查询
  • filter

    • 过滤条件对象

    • api极其丰富

    • 下面是一些常见filter写法

      // 查询所有 channel="财经焦点" 的新闻
      {
        channel: "财经焦点" 
      }
      
      // 查询所有 channel="财经焦点" 并且 title 包含 中国 的新闻
      {
        channel: "财经焦点", 
        title: /中国/  
      }
      
      // 查询所有 channel="财经焦点" 或者 title 包含 中国 的新闻
      {
        $or: [
          {
            channel: "财经焦点",
          },
          {
            title: /中国/,
          },
        ],
      }
        
      // 查询所有 发布日期 大于等于 昨天此时 的新闻
      // $gt 大于  $gte 大于等于  $lt 小于 $lte 小于等于   $ne 不等于 
      // $in 其值在某个数组中  $nin 其值不在某个数组中
      {
        pubDate: {
          $gte: Date.now() - 3600 * 24 * 1000,
        }
      }
      
  • projection

    • 可选参数

    • 字符串

    • 表示在查询结果中进行投影(获取想要的字段)

      // 仅查询_id、title、pubDate
      "title pubDate"
      
      // 除了 content 都要查询
      "-content"
      
  • options

    • 可选参数

    • 对象

    • 一些额外的配置

      // 跳过结果中的 5 条数据,取 6 条
      {
        skip: 5,
        limit: 6,
      }
        
      // 按照发布日期的降序排序
      {
        sort: "-pubDate"
      }
      
模型.countDocument(filter); // 获取指定条件的数量

更新

模型.updateOne(filter, doc); // 更新单个文档
模型.updateMany(filter, doc); // 更新多个文档
  • filter:条件,和查询中的filter含义和用法完全一致
  • doc:新的文档,新文档中的属性会覆盖旧文档中的对应字段

删除

模型.deleteOne(filter); // 删除单个文档
模型.deleteMany(filter); // 删除多个文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值