当前位置: 首页 > article >正文

MongoDB 语法简析

MongoDB

MongoDB是通用型文档数据库,存储模型为BSON(Binary JSON)文档。由C++语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
在这里插入图片描述

MongoDB 的增删改查操作

MongoDB 是一种 NoSQL 数据库,使用文档(document)存储数据,具有灵活的 JSON 样式结构。以下是 MongoDB 在增删改查(CRUD)操作中的具体实现及查询细节。


1. 插入(Create)

MongoDB 使用 insert 方法向集合中添加文档,常用命令包括:

  • insertOne:插入单个文档。
  • insertMany:插入多个文档。
语法
db.collection.insertOne({ document });
db.collection.insertMany([{ document1 }, { document2 }, ...]);
示例
// 插入单个文档
db.users.insertOne({
    name: "Alice",
    age: 25,
    hobbies: ["reading", "cycling"]
});

// 插入多个文档
db.users.insertMany([
    { name: "Bob", age: 30 },
    { name: "Charlie", age: 35, city: "New York" }
]);

2. 查询(Read)

MongoDB 提供强大的查询功能,支持条件查询、排序、限制、分页以及聚合操作。

基本查询
  • find:查找多个文档。
  • findOne:查找单个文档。
语法
db.collection.find(query, projection);
db.collection.findOne(query, projection);
  • query:查询条件(JSON 格式)。
  • projection:指定返回字段(1 表示返回,0 表示不返回)。
示例
// 查询所有文档
db.users.find();

// 查询年龄为 25 的用户
db.users.find({ age: 25 });

// 查询并只返回 name 字段
db.users.find({ age: 25 }, { name: 1, _id: 0 });

查询操作符

MongoDB 提供丰富的查询操作符,用于实现复杂条件。

操作符功能示例
$eq等于{ age: { $eq: 25 } }
$ne不等于{ age: { $ne: 25 } }
$gt大于{ age: { $gt: 25 } }
$gte大于等于{ age: { $gte: 25 } }
$lt小于{ age: { $lt: 25 } }
$lte小于等于{ age: { $lte: 25 } }
$in包含于数组{ age: { $in: [25, 30, 35] } }
$nin不包含于数组{ age: { $nin: [25, 30] } }
$exists字段是否存在{ city: { $exists: true } }
$regex正则匹配{ name: { $regex: /^A/ } }

排序、限制和分页

  • sort:按字段排序。
  • limit:限制返回文档数量。
  • skip:跳过指定数量的文档。
示例
// 查询并按年龄升序排序
db.users.find().sort({ age: 1 });

// 查询前 3 个用户
db.users.find().limit(3);

// 分页查询(每页 3 条,第二页)
db.users.find().skip(3).limit(3);

聚合操作

MongoDB 的聚合框架用于数据处理和分析,支持管道操作。管道操作则去掉中括号,是把前一次操作的结果送给下一个操作。

常用操作符
操作符功能
$match过滤数据,相当于 WHERE 条件
$group分组数据
$sort排序
$limit限制数量
$project字段选择或计算
$lookup表连接操作
$unwind拆分数组为多条记录
语法
db.collection.aggregate([
    { stage1 },
    { stage2 },
    ...
]);
示例
// 按年龄分组,并计算每组用户数量
db.users.aggregate([
    { $group: { _id: "$age", count: { $sum: 1 } } }
]);

// 查询用户总数并按年龄排序
db.users.aggregate([
    { $match: { age: { $gte: 25 } } },
    { $group: { _id: "$age", total: { $sum: 1 } } },
    { $sort: { _id: 1 } }
]);

//管道操作
db.book_info.aggregate( {"$project":{"title":1,"vote_num":1}},
      {"$group":{"_id":"$title","vote_num":{"$sum":"$vote_num"}}},
      {"$sort":{"vote_num":-1}},
      {"$limit":5})

将每个书籍信息中的书名和投票投射出来{"$project":{"title":1,"vote_num":1}}
   ↓↓
    统计每个书名所有的投票数(书名可能重复)    
    {"$group":{"_id":"$title","vote_num":{"$sum":"$vote_num"}}}
   ↓↓
    按照投票数降序排列{"$sort":{"vote_num":-1}}
   ↓↓
    将返回结果限制为前5{"$limit":5}

3. 更新(Update)

  • updateOne:更新单个文档。
  • updateMany:更新多个文档。
  • replaceOne:完全替换单个文档。
语法
db.collection.updateOne(query, update, options);
db.collection.updateMany(query, update, options);
  • query:指定要更新的文档。
  • update:更新操作符。
  • options:其他配置(如 upsert)。
常用操作符
操作符功能示例
$set设置字段值{ $set: { age: 30 } }
$unset删除字段{ $unset: { city: "" } }
$inc增加/减少数值{ $inc: { age: 1 } }
$push向数组添加元素{ $push: { hobbies: "running" } }
$pull从数组中删除元素{ $pull: { hobbies: "cycling" } }
示例
// 更新单个用户的年龄
db.users.updateOne({ name: "Alice" }, { $set: { age: 26 } });

// 更新多个用户的城市信息
db.users.updateMany({ age: { $gte: 30 } }, { $set: { city: "New York" } });

// 如果不存在则插入文档(upsert)
db.users.updateOne(
    { name: "David" },
    { $set: { age: 40 } },
    { upsert: true }
);

4. 删除(Delete)

  • deleteOne:删除单个文档。
  • deleteMany:删除多个文档。
语法
db.collection.deleteOne(query);
db.collection.deleteMany(query);
示例
// 删除单个用户
db.users.deleteOne({ name: "Alice" });

// 删除年龄大于 35 的所有用户
db.users.deleteMany({ age: { $gt: 35 } });

总结

  • MongoDB 提供了灵活的增删改查功能,适合处理各种复杂的数据需求。
  • 查询功能是 MongoDB 的核心,支持强大的条件过滤、排序、聚合分析。
  • 结合实际场景使用查询与聚合操作,可以高效实现数据处理与分析。

http://www.kler.cn/a/412821.html

相关文章:

  • Microsoft Excel如何插入多行
  • Python学习第十三天--面向对象,类和对象
  • 【详细介绍及演示】Flink之checkpoint检查点的使用
  • MQ高级2:MQ的可靠性
  • windows电脑上安装树莓派操作系统
  • 基于SpringBoot的工程教育认证的计算机课程管理系统【附源码】
  • 贴代码PasteForm框架之框架核心帮助类PasteFormHelper说明
  • go clean -modcache命令清理缓存
  • 使用 Tkinter 创建一个简单的 GUI 应用程序来合并视频和音频文件
  • 线程与进程的个人理解
  • 安全设备-日志审计-规则配置
  • JavaEE进阶-----mybatis操作数据库(新手教程)
  • 40分钟学 Go 语言高并发:【实战】并发安全的配置管理器
  • 文本处理之sed
  • 机器学习基础--基于线性回归房价预测
  • 【好玩的经典游戏】Docker环境下部署贪吃蛇网页小游戏(二)
  • uniapp运行时,同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示。
  • 钟睒睒的“傲慢与偏见”
  • vue3表单输入相关修饰符使用
  • AI写论文指令
  • Java全栈:超市购物系统实现
  • html+css+js打字游戏网页
  • 每日十题八股-2024年11月27日
  • 有什么好用的 tcp 性能测试工具 ?
  • 聚观早报 | 知乎Q3营收;华为Mate 70系列发布
  • C语言实例_12之求一正整数分解质因数