MongoDb的查询语法

本文详细介绍MongoDB数据库的基本操作,包括数据库与集合的管理、数据的增删查改、排序分页及复杂查询技巧。适用于初学者快速上手及进阶用户深入掌握。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据库与集合的基础操作

  #查看数据库
  show dbs;
  #切换数据库
  use luban;
  #创建数据库与集合,在插入数据时会自动 创建数据库与集和
  db.friend.insertOne({name:"wukong",sex:"man"});
  #查看集合
  show tables;
  show collections;
  #删除集合
  db.friend.drop();
  #删除数据库
  db.dropDatabase();

2.数据的新增的方式

关于Mongodb数据插入的说明
1). 数据库的新增不需要序先设计模型结构,插入数据时会自动创建。
2). 同一个集合中不同数据字段结构可以不一样

插入相关方法:
```
//插入单条 
db.friend.insertOne({name:"wukong",sex:"man"});
// 插入多条
db.friend.insertMany([
{name:"wukong",sex:"man"},{name:"diaocan",sex:"woman",age:18,birthday:new Date("1995-11-02")},{name:"zixiao",sex:"woman"}
]);
// 指定ID 
 db.friend.insert([
        {_id:1,name:"wokong",sex:"man",age:1},
        {_id:2,name:"diaocan",sex:"women",birthday:new Date("1988-11-    11")}
  ])
```

3、数据的查询

3.1.基础查询:
```
#基于ID查找
db.emp.find({_id:1101})
#基于属性查找
db.emp.find({"name":"鲁班"})
# && 运算 与大于 运算
db.emp.find({"job":"讲师","salary":{$gt:8000}})
# in 运算
 db.emp.find({"job":{$in:["讲师","客服部"]}})
# or 运算
db.emp.find({$or:[{job:"讲师"  },{job:"客服部"}] })

4.排序与分页:
//  sort skip limit
```
db.emp.find().sort({dep:1,salary:-1}).skip(5).limit(2)

5.嵌套查询:

```
# 错误示例:无结果
db.student.find({grade:{redis:87,dubbo:90 });
#错误示例:无结果 
db.student.find({grade:{redis:87,dubbo:90,zookeper:85} })

# 基于复合属性查找 时必须包含其所有的值 并且顺序一至
db.student.find({grade:{redis:87,zookeper:85,dubbo:90} })

#基于复合属性当中的指定值 查找。注:名称必须用双引号
db.student.find({"grade.redis":87});

db.student.find({"grade.redis":{"$gt":80}});

6.数组查询:
```
db.subject.insertMany([
{_id:"001",name:"陈霸天",subjects:["redis","zookeper","dubbo"]},
{_id:"002",name:"张明明",subjects:["redis","Java","mySql"]},
{_id:"003",name:"肖炎炎",subjects:["mySql","zookeper","bootstrap"]},
{_id:"004",name:"李鬼才",subjects:["Java","dubbo","Java"]},
])
```

```
#无结果
db.subject.find({subjects:["redis","zookeper"]})
#无结果
db.subject.find({subjects:["zookeper","redis","dubbo"]})
# 与嵌套查询一样,必须是所有的值 并且顺序一至
db.subject.find({subjects:["redis","zookeper","dubbo"]})

# $all 匹配数组中包含该两项的值。注:顺序不作要求
db.subject.find({subjects:{"$all": ["redis","zookeper"]}})
注:
# 简化数组查询
db.subject.find({subjects:"redis"})
# 简化数组查询 ,匹配数组中存在任意一值。与$all相对应
db.subject.find({subjects:{$in: ["redis","zookeper"]}})

7.数组嵌套查询:
```
#基础查询 ,必须查询全部,且顺序一至
db.subject2.find({subjects:{name:"redis",hour:12} })
#指定查询第一个数组 课时大于12
db.subject2.find({"subjects.0.hour":{$gt:12}})
#查询任科目 课时大于12
db.subject2.find({"subjects.hour":{$gt:12}})
# $elemMatch 元素匹配,指定属性满足,且不要求顺序一至
db.subject2.find({subjects:{$elemMatch:{name:"redis",hour:12}}})

# 数组中任意元素匹配 不限定在同一个对象当中
db.subject2.find({"subjects.name":"mysql","subjects.hour":120})

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值