mongodb:增删改查和特殊查询符号手册

前言

最近考虑开发游戏,网上推荐使用非关系数据库mongodb,因此浅尝了一番,并将一些语句和符号记录在这里。

相对于mysql、oracle这些关系型数据库,基于json文档的mongodb在很多地方都与之大不相同(可以类比为TCP握手连接、和UDP无连接这样的差异),开始学的时候,挺难转变固有设计思路的。

增删改查

1. 创建(Create)

在 MongoDB 中,创建操作通常指插入文档到集合中。

插入单个文档
db.collectionName.insertOne({
    field1: value1,
    field2: value2,
    // ...
});
插入多个文档
db.collectionName.insertMany([
    { field1: value1, field2: value2 },
    { field1: value3, field2: value4 },
    // ...
]);

2. 读取(Read)

读取操作是指从集合中检索文档。

查询所有文档
db.collectionName.find({});
查询特定条件的文档
db.collectionName.find({ field1: value1 });
查询并返回特定字段
db.collectionName.find({ field1: value1 }, { field2: 1, _id: 0 }); // 只返回 field2 字段,不返回 _id 字段

3. 更新(Update)

更新操作是指修改集合中的文档。

更新单个文档
db.collectionName.updateOne(
    { field1: value1 }, // 查询条件
    { $set: { field2: newValue2 } } // 更新操作
);
更新多个文档
db.collectionName.updateMany(
    { field1: value1 }, // 查询条件
    { $set: { field2: newValue2 } } // 更新操作
);

4. 删除(Delete)

删除操作是指从集合中移除文档。

删除单个文档
db.collectionName.deleteOne({ field1: value1 });
删除多个文档
db.collectionName.deleteMany({ field1: value1 });

复杂的查询

1. 常用操作

计数文档
db.collectionName.countDocuments({ field1: value1 });
排序文档
db.collectionName.find({}).sort({ field1: 1 }); // 升序排序
db.collectionName.find({}).sort({ field1: -1 }); // 降序排序
分页查询
db.collectionName.find({}).skip(10).limit(5); // 跳过前10个文档,返回接下来的5个文档
根据id查询
sql 复制代码
db.collectionName.find({ _id: ObjectId("671db3ea81470184298c3d44") });
聚合查询
sql 复制代码
//查询某辆车某种成色的情况
db.global_item.aggregate([
  {
    $match: {
      car_type: "SUV"
    }
  },
  {
    $unwind: "$car_fine"
  },
  {
    $match: {
      "car_fine.fine": "饱经摧残"
    }
  },
  {
    $project: {
      _id: 1,
      desc: "$car_fine.desc",
      fine: "$car_fine.fine",
      mile_fix: "$car_fine.mile_fix",
      person_fix: "$car_fine.person_fix",
      refit: "$car_fine.refit",
      speed_fix: "$car_fine.speed_fix",
      weight_fix: "$car_fine.weight_fix"
    }
  }
])
解释
  1. $match

    • 第一个 $match 阶段过滤出 car_type"SUV" 的文档。
  2. $unwind

    • $unwind 展开 car_fine 数组,每个元素都会生成一个新的文档。
  3. $match

    • 第二个 $match 阶段过滤出 car_fine.fine 字段为 "饱经摧残" 的文档。
  4. $project

    • $project 阶段只返回你需要的字段,并重新命名这些字段以符合你的输出格式。

复杂查询操作符

1. 逻辑操作符
  • $and:匹配所有给定条件
  • $or:匹配任意一个给定条件
  • $not:对条件取反
  • $nor:不匹配所有给定条件
示例:
// 使用 $and 操作符,匹配 field1 = value1 且 field2 = value2 的文档
db.collectionName.find({
    $and: [
        { field1: value1 },
        { field2: value2 }
    ]
});

// 使用 $or 操作符,匹配 field1 = value1 或 field2 = value2 的文档
db.collectionName.find({
    $or: [
        { field1: value1 },
        { field2: value2 }
    ]
});

// 使用 $not 操作符,匹配 field1 不等于 value1 的文档
db.collectionName.find({
    field1: { $not: { $eq: value1 } }
});

// 使用 $nor 操作符,不匹配 field1 = value1 且 field2 = value2 的文档
db.collectionName.find({
    $nor: [
        { field1: value1 },
        { field2: value2 }
    ]
});
2. 比较操作符
  • $eq:等于
  • $ne:不等于
  • $gt:大于
  • $gte:大于等于
  • $lt:小于
  • $lte:小于等于
  • $in:在数组中的值
  • $nin:不在数组中的值
示例:
// 查找 field1 等于 value1 的文档
db.collectionName.find({ field1: { $eq: value1 } });

// 查找 field1 不等于 value1 的文档
db.collectionName.find({ field1: { $ne: value1 } });

// 查找 field2 大于 value2 的文档
db.collectionName.find({ field2: { $gt: value2 } });

// 查找 field2 大于等于 value2 的文档
db.collectionName.find({ field2: { $gte: value2 } });

// 查找 field2 小于 value2 的文档
db.collectionName.find({ field2: { $lt: value2 } });

// 查找 field2 小于等于 value2 的文档
db.collectionName.find({ field2: { $lte: value2 } });

// 查找 field1 的值在 [value1, value2, value3] 数组中的文档
db.collectionName.find({ field1: { $in: [value1, value2, value3] } });

// 查找 field1 的值不在 [value1, value2, value3] 数组中的文档
db.collectionName.find({ field1: { $nin: [value1, value2, value3] } });
3. 元素操作符
  • $exists:判断字段是否存在
  • $type:判断字段类型
示例:
// 查找包含 field1 字段的文档(无论 field1 的值是什么)
db.collectionName.find({ field1: { $exists: true } });

// 查找不包含 field1 字段的文档
db.collectionName.find({ field1: { $exists: false } });

// 查找 field1 的类型为指定类型的文档(MongoDB类型编号或名称)
db.collectionName.find({ field1: { $type: "string" } }); // 或者使用类型编号,如 $type: 2
4. 数组操作符
  • $all:匹配数组中所有元素
  • $elemMatch:匹配数组中的嵌套文档或特定条件
  • $size:匹配数组长度
示例:
// 查找数组字段 fieldArray 包含所有指定元素的文档
db.collectionName.find({ fieldArray:

看着都头疼

相关推荐
尘浮生1 小时前
Java项目实战II基于Spring Boot的美食烹饪互动平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·美食
forestqq1 小时前
构建后端为etcd的CoreDNS的容器集群(七)、编写适合阅读的域名管理脚本
运维·数据库·etcd
hongkid1 小时前
MongoDB常用操作
数据库·mongodb
岁岁岁平安1 小时前
mysql上课总结(1)(mysql中的常见的存储引擎)(面试)
数据库·mysql·innodb·存储引擎
幽兰的天空3 小时前
python实现excel数据导入数据库
数据库
尘佑不尘4 小时前
shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘
数据库·笔记·mongodb·web安全·jenkins·1024程序员节
传输能手4 小时前
从三方云服务器将数据迁移至本地,如何保障安全高效?
大数据·服务器·数据库
BinTools图尔兹5 小时前
CQ社区版 v2024.10 | 支持k8s、helm部署!
数据库·安全·k8s·helm·数据安全·数据库管理员
北笙··5 小时前
Redis慢查询分析优化
数据库·redis·缓存
p-knowledge5 小时前
redis的三种客户端
数据库·redis·缓存