MongoDB的各种查询(2)

前序

MongoDB的简介我也就不过多的介绍了,如果基本的MongoDB的CRUD操作还不会的兄弟们可以去看看我前一章文章,主要是介绍MongoDB的基本操作的

今日内容

  • 谈谈文档之间的关系
  • 基础查询
  • 分页、排序、投影
  • 模糊查询
  • Criteria标准查询接口
  • 嵌套查询

正文

文档间的关系

一对一(one to one)

在MongoDB中可以通过内嵌文档的方式来体现一对一关系

db.wifeAndHusband.insert([
{
     name:"黄蓉",
		 husband:{
		 name:"郭靖"
		 }
}
,{
     name:"虞姬",
		 husband:{
		 name:"项羽"
		 }
}])

在这里插入图片描述

在嵌套文档中可以存放单个字段,也可以存放对象,结构比较自由

一对多(one to many) / 多对一(many to one)
//创建一个Users集合
db.users.insert([{username:"张三"},{username:"李四"}])

在这里插入图片描述

//创建order集合
db.order.insert({
list:["苹果","香蕉","草莓"],
user_id:"627a5e1d3751000061006f14"
});
db.order.insert({
list:["西瓜","哈密瓜","甜瓜"],
user_id:"627a5e1d3751000061006f15"   
});

在这里插入图片描述
user_id对应的是users集合中用户的_id属性

//通过用户的_id来查询订单集合中的数据
var uid =db.users.findOne({username:"张三"})._id;
db.order.find({user_id:uid+""});

在这里插入图片描述

多对多(many to many)
db.teachers.insert([{name:"洪七公"},{name:"黄药师"},{name:"龟仙人"}]);

在这里插入图片描述

//一个学生有多个老师,多个老师也能有多个学生
db.stus.insert([{name:"郭靖",tech_ids:[
"626ba548035400000101876b","626ba548035400000101876c"
]}])

db.stus.insert([{name:"悟饭",tech_ids:[
"626ba548035400000101876b","626ba61e0354000001018770"
]}])

在这里插入图片描述

基础查询

查询所有

db.collection.find({})  返回的数组
  • find()用来查询所有符合条件的文档
  • find()可以接收一个对象作为条件参数
  • {}表示查询集合中所有的文档

条件查询

db.book.find({title:"水浒传"})

多个条件一起查询

db.book.find({press:"人民出版社",title:"水浒传"})

在这里插入图片描述

查询集合中符合条件的第一个文档对象

db.collection.findOne()  返回的文档对象
分页查询
count()

在这里插入图片描述

db.book.count();

不带条件,表示查询的所有数据条数

在这里插入图片描述

db.book.count({press:"人民出版社"});

在这里插入图片描述

limit()

返回指定条数得到记录

db.book.find().limit(3);

在这里插入图片描述

skip()

传一个数字作为跳过的记录条数

db.book.find().skip(3);

在这里插入图片描述
limit+skip配合使用

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

在这里插入图片描述

排序
sort()

排序的规则:升序 1 降序 -1

//按照时间排序,排序规则是升序
db.book.find().sort({data:1})

在这里插入图片描述

db.book.find().sort({data:-1})

在这里插入图片描述

投影

投影意思是只选择必要的数据而不是选择一个文件的数据的整个信息,其实就是类似于mysql指定字段查询

db.book.find({},{title:1,data:1})

在这里插入图片描述
如果没有指定隐藏_id属性是会默认显示的
1:表示显示,0:表示隐藏

db.book.find({},{title:1,_id:0})

在这里插入图片描述

模糊查询
$regex() 为查询中的模式匹配字符串提供正则表达式功能 。
db.book.find({"title":{$regex://}});

在这里插入图片描述
还有一种更加简洁的方式

db.book.find({title://});

还有几种结合正则表达式的写法

//查询以某字段开头的文档
db.collection.find({"字段名":{$regex:/^XXX/}})
//查询以某字段结尾的文档
db.collection.find({"字段名":{$regex:/XXX^/}})
//查询忽略大小写
db.collection.find({"字段名":{$regex:/XXX/i}})
Criteria标准查询接口

Criteria(标准、条件)是标准的查询接口,可以引用静态Criteria.where的把多个条件组合在一起,就可以轻松的将多个方法连接起来,方便我们操作查询语句

CriteriaMongoDB说明
Criteria and(String key)$and并且
Criteria andOperator(Criteria…criteria)$and并且
Criteria orOperator(Criteria…criteria)$or或者
Criteria gt(Object o)$gt大于
Criteria gte(Object o)$gte大于等于
Criteria in (Object…o)$in包含
Criteria is(Object o)$is等于
Criteria it(Object o)$lt小于
Criteria ite(Object o)$ite小等于
Criteria nin(Object…o)$nin不包含

数据准备

//向numbers插入2W条数据
var arr =[];
for(var i=1;i<=20000;i++){
arr.push({num:i});
}
db.numbers.insert(arr);

1、查询numbers中num大于5000的文档

db.numbers.find({num:{$gt:5000}})

2、查询numbers中num大于40小于50文档

//多条件时使用逗号相隔开
db.numbers.find({num:{$gt:40,$lt:50}})

3、查询numbers集合中的前十条数据

db.numbers.find({num:{$lte:10}})

其余的规则都可以按照这个规则来自行测试

嵌套查询

样本数据

db.users.insert({username:"张三"});
db.users.update({username:"张三"},{$set:{hobby:
{cities:["beijing","shanghai","shenzhen"],
movies:["sanguo","hero"]}}});

在这里插入图片描述
如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号

db.users.find({"hobby.cities":"beijing"})
删除内嵌文档中的数据
db.users.update({username:"张三"},{$pull:{"hobby.cities":"beijing"}});
在内嵌文档中新增数据

第一种:

db.users.update({username:"张三"},{$push:{"hobby.cities":"nanjing"}});

第二种:

db.users.update({username:"张三"},{$addToSet:{"hobby.cities":"nanjing"}});

$push用于向数组中添加新的元素
$addToSet 向数组中添加一个新元素
两者的区别: 前者,如果添加了还能再添加重复的,后者,如果添加不能再添加,不能添加重复的

结尾

本章博客主要带来的是MongoDB的查询功能,任何一个数据库CRUD操作中,主要难点在于对数据的查询,希望各位能对此多练习实操,希望本章能对兄弟们带来帮助,下章带来的知识点内容是MongoTemplent类的基本使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C# 中使用 MongoDB 进行查询操作,需要使用 MongoDB 的 C# 驱动程序,该驱动程序提供了一组 API 用于实现查询操作。下面我们来分别介绍这些查询操作: 1. 等于查询 等于查询是最常用的查询操作,它用于查询指定字段等于指定值的文档。在 C# 中实现等于查询,可以使用下面的代码: ```c# var filter = Builders<BsonDocument>.Filter.Eq("field", "value"); var result = collection.Find(filter).ToList(); ``` 其中,`field` 是要查询的字段名,`value` 是要查询的值。`Builders<BsonDocument>.Filter.Eq` 方法用于创建等于查询的过滤器,`collection.Find` 方法用于执行查询操作。 2. 大于查询和小于查询 大于查询和小于查询分别用于查询指定字段大于或小于指定值的文档。在 C# 中实现大于查询和小于查询,可以使用下面的代码: ```c# // 大于查询 var filter = Builders<BsonDocument>.Filter.Gt("field", "value"); var result = collection.Find(filter).ToList(); // 小于查询 var filter = Builders<BsonDocument>.Filter.Lt("field", "value"); var result = collection.Find(filter).ToList(); ``` 其中,`Builders<BsonDocument>.Filter.Gt` 方法用于创建大于查询的过滤器,`Builders<BsonDocument>.Filter.Lt` 方法用于创建小于查询的过滤器。 3. 大于等于查询和小于等于查询 大于等于查询和小于等于查询分别用于查询指定字段大于等于或小于等于指定值的文档。在 C# 中实现大于等于查询和小于等于查询,可以使用下面的代码: ```c# // 大于等于查询 var filter = Builders<BsonDocument>.Filter.Gte("field", "value"); var result = collection.Find(filter).ToList(); // 小于等于查询 var filter = Builders<BsonDocument>.Filter.Lte("field", "value"); var result = collection.Find(filter).ToList(); ``` 其中,`Builders<BsonDocument>.Filter.Gte` 方法用于创建大于等于查询的过滤器,`Builders<BsonDocument>.Filter.Lte` 方法用于创建小于等于查询的过滤器。 4. 包含查询 包含查询用于查询指定字段包含指定值的文档。在 C# 中实现包含查询,可以使用下面的代码: ```c# var filter = Builders<BsonDocument>.Filter.In("field", new BsonArray { "value1", "value2", "value3" }); var result = collection.Find(filter).ToList(); ``` 其中,`new BsonArray { "value1", "value2", "value3" }` 是要查询的值列表,`Builders<BsonDocument>.Filter.In` 方法用于创建包含查询的过滤器。 5. 不包含查询 不包含查询用于查询指定字段不包含指定值的文档。在 C# 中实现不包含查询,可以使用下面的代码: ```c# var filter = Builders<BsonDocument>.Filter.Nin("field", new BsonArray { "value1", "value2", "value3" }); var result = collection.Find(filter).ToList(); ``` 其中,`new BsonArray { "value1", "value2", "value3" }` 是要查询的值列表,`Builders<BsonDocument>.Filter.Nin` 方法用于创建不包含查询的过滤器。 以上是 MongoDB 中常用的几种查询操作,在 C# 中可以使用 MongoDB 的 C# 驱动程序实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值