MongoDB基础

安装

我是在windows环境下使用DockerDeskTop的方式进行安装的,如果你是linux自行改一下挂载路径就好了

docker run -dit --name mongo -p 27017:27017 -v E:\DockerImageData\volumes\mongo\config\mongod.conf:/etc/mongod.conf -v E:\DockerImageData\volumes\mongo\data:/data/db -v E:\DockerImageData\volumes\mongo\mongo/logs:/var/log/mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo

一、数据库的操作

1、选择数据库和创建数据库的语法如下(如果数据库不存在会自动创建)

use 数据库名称;
例如: use article;

2、查看所有数据库

show databases;

3、查看当前正在使用的数据库

MongoDB 中默认的数据库为 test,如果没有选择数据库,集合将存放在 test 数据库中
db;

4、删除数据库

db.dropDatabase();

二、集合的操作

1、创建一个集合

(1)方式一:
db.createCollection('lytest')

(2)方式二:隐式创建一个集合,当向一个集合中插入一个文档的时候,如果集合不存在,则会自动创建集合

2、查看所有集合

show collections;

3、删除当前集合

db.collection.drop();

4、 删除指定集合

db.lytest.drop();

三、文档的操作

1、新增文档

(1)向 lytest 集合中插入一条测试数据
db.lytest.insertOne({
    article_id: 100000,
    content: "今天天气真好,阳光明媚",
    user_id: "1001",
    nickname: "Rose",
    create_time: new Date(),
    like_number: NumberInt(10),
    state: null
});
(2)、向 lytest 集合中插入多条测试数据
db.lytest.insertMany([
  {
    _id: NumberInt(1),
    article_id: "100001",
    content: "我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我他。",
    user_id: "1002",
    nickname: "Rose",
    create_time: new Date("2019-08-05T22:08:15.522Z"),
    like_number: NumberInt(1000),
    state: "1"
  },
  {
    _id: NumberInt(2),
    article_id: "100001",
    content: "我夏天空腹喝凉开水,冬天喝温开水",
    user_id: "1005",
    nickname: "相忘于江湖",
    create_time: new Date("2019-08-05T23:58:51.485Z"),
    like_number: NumberInt(888),
    state: null
  },
  {
    article_id: "100002",
    content: "我一直喝凉开水,冬天夏天都喝。",
    user_id: "1004",
    nickname: "杰克船长",
    create_time: new Date("2019-08-06T01:05:06.321Z"),
    like_number: NumberInt(666),
    state: "1"
  },
  {
    _id: NumberInt(4),
    article_id: "100003",
    content: "专家说不能空腹吃饭,影响健康。",
    user_id: "1003",
    nickname: "凯撒",
    create_time: new Date("2019-08-06T08:18:35.288Z"),
    like_number: NumberInt(2000),
    state: "0"
  },
  {
    _id: NumberInt(5),
    article_id: "100003",
    content: "研究表明,刚烧开的水千万不能喝,因为烫嘴。",
    user_id: "1003",
    nickname: "凯撒",
    create_time: new Date("2019-08-06T11:01:02.521Z"),
    like_number: NumberInt(3000),
    state: "1"
  },
  {
    article_id: "100004",
    content: "每天早上起床第一件事就是喝水,补充水分。",
    user_id: "1006",
    nickname: "清风徐来",
    create_time: new Date("2019-08-07T09:10:22.111Z"),
    like_number: NumberInt(1200),
    state: null
  },
  {
    _id: NumberInt(7),
    article_id: "100005",
    content: "温水泡枸杞,养生又养颜。",
    user_id: "1007",
    nickname: "小李飞刀",
    create_time: new Date("2019-08-07T12:30:45.678Z"),
    like_number: NumberInt(950),
    state: "1"
  },
  {
    _id: NumberInt(8),
    article_id: "100006",
    content: "早起一杯温水,唤醒身体。",
    user_id: "1008",
    nickname: "水墨江南",
    create_time: new Date("2019-08-08T07:00:00.000Z"),
    like_number: NumberInt(1100),
    state: "0"
  },
  {
    article_id: "100007",
    content: "不要熬夜,早点睡觉,身体健康最重要。",
    user_id: "1009",
    nickname: "夜行者",
    create_time: new Date("2019-08-08T22:45:10.333Z"),
    like_number: NumberInt(780),
    state: "1"
  },
  {
    _id: NumberInt(10),
    article_id: "100008",
    content: "喝冰水会导致肠胃不适,建议少喝。",
    user_id: "1010",
    nickname: "阳光男孩",
    create_time: new Date("2019-08-09T14:20:30.456Z"),
    like_number: NumberInt(600),
    state: null
  },
  {
    article_id: "100009",
    content: "每天坚持锻炼一小时,活力满满。",
    user_id: "1011",
    nickname: "运动狂人",
    create_time: new Date("2019-08-10T08:30:15.789Z"),
    like_number: NumberInt(1300),
    state: "1"
  },
  {
    _id: NumberInt(12),
    article_id: "100010",
    content: "生活不止眼前的苟且,还有诗和远方。",
    user_id: "1012",
    nickname: "理想主义者",
    create_time: new Date("2019-08-10T19:45:00.123Z"),
    like_number: NumberInt(2000),
    state: "0"
  },
  {
    _id: NumberInt(13),
    article_id: "100011",
    content: "人生没有彩排,每一天都是现场直播。",
    user_id: "1013",
    nickname: "哲思者",
    create_time: new Date("2019-08-11T11:11:11.111Z"),
    like_number: NumberInt(1800),
    state: "1"
  },
  {
    article_id: "100012",
    content: "珍惜当下,活在当下。",
    user_id: "1014",
    nickname: "随心所欲",
    create_time: new Date("2019-08-12T16:30:22.444Z"),
    like_number: NumberInt(900),
    state: null
  },
  {
    _id: NumberInt(15),
    article_id: "100013",
    content: "快乐其实很简单,一个微笑就能传递。",
    user_id: "1015",
    nickname: "开心果",
    create_time: new Date("2019-08-13T10:10:10.100Z"),
    like_number: NumberInt(1050),
    state: "1"
  },
  {
    article_id: "100014",
    content: "读书使人充实,思考使人深邃。",
    user_id: "1016",
    nickname: "书虫",
    create_time: new Date("2019-08-14T09:30:45.678Z"),
    like_number: NumberInt(1400),
    state: "0"
  },
  {
    _id: NumberInt(17),
    article_id: "100015",
    content: "时间就像海绵里的水,挤一挤总会有的。",
    user_id: "1017",
    nickname: "鲁迅迷弟",
    create_time: new Date("2019-08-15T12:00:00.000Z"),
    like_number: NumberInt(1700),
    state: "1"
  },
  {
    _id: NumberInt(18),
    article_id: "100016",
    content: "成功不是将来才有的,而是从决定去做的那一刻起持续累积而成。",
    user_id: "1018",
    nickname: "奋斗者",
    create_time: new Date("2019-08-16T18:22:33.444Z"),
    like_number: NumberInt(2100),
    state: null
  },
  {
    article_id: "100017",
    content: "失败是成功之母,努力才是根本。",
    user_id: "1019",
    nickname: "追梦人",
    create_time: new Date("2019-08-17T14:14:14.144Z"),
    like_number: NumberInt(1600),
    state: "1"
  },
  {
    _id: NumberInt(20),
    article_id: "100018",
    content: "梦想不会发光,发光的是追梦的你。",
    user_id: "1020",
    nickname: "星辰大海",
    create_time: new Date("2019-08-18T20:20:20.200Z"),
    like_number: NumberInt(1900),
    state: "0"
  }
]);
(3)向 lytest 集合中插入多条测试数据,并捕获插入时可能出现的异常
try{
db.lytest.insertMany([
  {
    _id: NumberInt(1),
    article_id: "100001",
    content: "我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我他。",
    user_id: "1002",
    nickname: "Rose",
    create_time: new Date("2019-08-05T22:08:15.522Z"),
    like_number: NumberInt(1000),
    state: "1"
  },
  {
    _id: NumberInt(2),
    article_id: "100001",
    content: "我夏天空腹喝凉开水,冬天喝温开水",
    user_id: "1005",
    nickname: "相忘于江湖",
    create_time: new Date("2019-08-05T23:58:51.485Z"),
    like_number: NumberInt(888),
    state: null
  },
  {
    article_id: "100002",
    content: "我一直喝凉开水,冬天夏天都喝。",
    user_id: "1004",
    nickname: "杰克船长",
    create_time: new Date("2019-08-06T01:05:06.321Z"),
    like_number: NumberInt(666),
    state: "1"
  },
  {
    _id: NumberInt(4),
    article_id: "100003",
    content: "专家说不能空腹吃饭,影响健康。",
    user_id: "1003",
    nickname: "凯撒",
    create_time: new Date("2019-08-06T08:18:35.288Z"),
    like_number: NumberInt(2000),
    state: "0"
  },
  {
    _id: NumberInt(5),
    article_id: "100003",
    content: "研究表明,刚烧开的水千万不能喝,因为烫嘴。",
    user_id: "1003",
    nickname: "凯撒",
    create_time: new Date("2019-08-06T11:01:02.521Z"),
    like_number: NumberInt(3000),
    state: "1"
  },
  {
    article_id: "100004",
    content: "每天早上起床第一件事就是喝水,补充水分。",
    user_id: "1006",
    nickname: "清风徐来",
    create_time: new Date("2019-08-07T09:10:22.111Z"),
    like_number: NumberInt(1200),
    state: null
  },
  {
    _id: NumberInt(7),
    article_id: "100005",
    content: "温水泡枸杞,养生又养颜。",
    user_id: "1007",
    nickname: "小李飞刀",
    create_time: new Date("2019-08-07T12:30:45.678Z"),
    like_number: NumberInt(950),
    state: "1"
  },
  {
    _id: NumberInt(8),
    article_id: "100006",
    content: "早起一杯温水,唤醒身体。",
    user_id: "1008",
    nickname: "水墨江南",
    create_time: new Date("2019-08-08T07:00:00.000Z"),
    like_number: NumberInt(1100),
    state: "0"
  },
  {
    article_id: "100007",
    content: "不要熬夜,早点睡觉,身体健康最重要。",
    user_id: "1009",
    nickname: "夜行者",
    create_time: new Date("2019-08-08T22:45:10.333Z"),
    like_number: NumberInt(780),
    state: "1"
  },
  {
    _id: NumberInt(10),
    article_id: "100008",
    content: "喝冰水会导致肠胃不适,建议少喝。",
    user_id: "1010",
    nickname: "阳光男孩",
    create_time: new Date("2019-08-09T14:20:30.456Z"),
    like_number: NumberInt(600),
    state: null
  },
  {
    article_id: "100009",
    content: "每天坚持锻炼一小时,活力满满。",
    user_id: "1011",
    nickname: "运动狂人",
    create_time: new Date("2019-08-10T08:30:15.789Z"),
    like_number: NumberInt(1300),
    state: "1"
  },
  {
    _id: NumberInt(12),
    article_id: "100010",
    content: "生活不止眼前的苟且,还有诗和远方。",
    user_id: "1012",
    nickname: "理想主义者",
    create_time: new Date("2019-08-10T19:45:00.123Z"),
    like_number: NumberInt(2000),
    state: "0"
  },
  {
    _id: NumberInt(13),
    article_id: "100011",
    content: "人生没有彩排,每一天都是现场直播。",
    user_id: "1013",
    nickname: "哲思者",
    create_time: new Date("2019-08-11T11:11:11.111Z"),
    like_number: NumberInt(1800),
    state: "1"
  },
  {
    article_id: "100012",
    content: "珍惜当下,活在当下。",
    user_id: "1014",
    nickname: "随心所欲",
    create_time: new Date("2019-08-12T16:30:22.444Z"),
    like_number: NumberInt(900),
    state: null
  },
  {
    _id: NumberInt(15),
    article_id: "100013",
    content: "快乐其实很简单,一个微笑就能传递。",
    user_id: "1015",
    nickname: "开心果",
    create_time: new Date("2019-08-13T10:10:10.100Z"),
    like_number: NumberInt(1050),
    state: "1"
  },
  {
    article_id: "100014",
    content: "读书使人充实,思考使人深邃。",
    user_id: "1016",
    nickname: "书虫",
    create_time: new Date("2019-08-14T09:30:45.678Z"),
    like_number: NumberInt(1400),
    state: "0"
  },
  {
    _id: NumberInt(17),
    article_id: "100015",
    content: "时间就像海绵里的水,挤一挤总会有的。",
    user_id: "1017",
    nickname: "鲁迅迷弟",
    create_time: new Date("2019-08-15T12:00:00.000Z"),
    like_number: NumberInt(1700),
    state: "1"
  },
  {
    _id: NumberInt(18),
    article_id: "100016",
    content: "成功不是将来才有的,而是从决定去做的那一刻起持续累积而成。",
    user_id: "1018",
    nickname: "奋斗者",
    create_time: new Date("2019-08-16T18:22:33.444Z"),
    like_number: NumberInt(2100),
    state: null
  },
  {
    article_id: "100017",
    content: "失败是成功之母,努力才是根本。",
    user_id: "1019",
    nickname: "追梦人",
    create_time: new Date("2019-08-17T14:14:14.144Z"),
    like_number: NumberInt(1600),
    state: "1"
  },
  {
    _id: NumberInt(20),
    article_id: "100018",
    content: "梦想不会发光,发光的是追梦的你。",
    user_id: "1020",
    nickname: "星辰大海",
    create_time: new Date("2019-08-18T20:20:20.200Z"),
    like_number: NumberInt(1900),
    state: "0"
  }
]);
}catch(e) {
 print(e)
}

2、查询文档

(1)、查询所有文档

db.lytest.find();

(2)、按条件查询文档

db.lytest.find({_id:"2"});
db.lytest.find({article_id:"100001"});

(3)、按条件查询出多个结果后只选择一条

db.lytest.findOne({article_id:'100001'});

(4)、查询部分字段

db.lytest.findOne({_id:"3"},{content:1,create_time:1});

(5)、查询部分字段的同时隐藏_id列

db.lytest.findOne({_id:'3'},{content:1,create_time:1,_id:0});

(6)、正则条件查询
  • content字段包含 开水
    db.lytest.find({content:/开水/});

  • content字段以专家开头
    db.lytest.find({content:/^专家/});

(7)、比较查询

db.lytest.find({like_number:{$gt:100}}); // 查询点赞数大于100的
db.lytest.find({like_number:{$lt:100}}); // 查询点赞数小于100的
db.lytest.find({like_number:{$gte:100}}); // 查询点赞数大于等于100的
db.lytest.find({like_number:{$lte:100}}); // 查询点赞数小于等于100的
db.lytest.find({like_number:100}); // 查询点赞数等于100的
db.lytest.find({like_number:{$ne:100}}); // 查询点赞数不等于100的

(8)、包含查询

db.lytest.find({user_id:{$in:["1003","1004"]}}); // 查询user_id 包含 1003 1004 的
db.lytest.find({user_id:{$nin:["1001","1003"]}}); // 查询user_id 不包含 1001 1003 的

(9)、条件连接查询,也就是需要满足多个条件
  • 查询点赞数大于等于 200 并且 用户编号为 1003 或 1004 的文档
    db.lytest.find({ $and:[ {like_number:{$gte:NumberInt(200)}}, {user_id:{$in:["1003","1004"]}} ] });

  • 查询状态为 1 并且 内容包含 我 的文档
    db.lytest.find({ $or:[ {state:1} ] });

db.lytest.find({ $and:[ {like_number:NumberInt(10)} ] });

(10)、分页查询

db.lytest.find().limit(2).skip(2);

(11)、排序查询 1 (升序), -1 (降序)

db.lytest.find().sort({ user_id:-1, like_number:1 });
注意:skip()、limilt()、sort() 三个放在一起执行的时候,执行的顺序是先 sort()、skip()、limit(),和命令编写顺序无关

3、更新文档

(1)指定字段更新

db.lytest.updateOne( { state: null }, // 查询条件:state 为 null { $set: { state: "0" } } // 更新操作:将 state 设置为字符串 "0" );

(2)批量更新

db.lytest.updateMany( {user_id:"1003"}, { $set:{ nickname:"凯撒大帝" } });

(3)列值增长的更新
  • 更新 id 为 1 文档的点赞数自增 1
    db.lytest.updateOne( {_id:1}, { $inc:{ like_number: NumberInt(1) } } );

4、删除文档

  • 删除 id 为 1 的文档
    db.lytest.deleteOne( {_id:1} );

  • 删除满足条件的文档
    db.lytest.deleteMany( {like_number:{$gt:10000}} );

5、统计文档

  • 统计所有文档数
    db.lytest.countDocuments();

  • 按条件统计文档数
    db.lytest.countDocuments( {user_id:"1003"} );

posted @ 2025-06-16 16:46  我也有梦想呀  阅读(12)  评论(0)    收藏  举报