mongo-03-查询文档

本文详细介绍了MongoDB的find查询方法,包括基本查询、pretty格式化显示、比较和逻辑操作符、字段操作符、数组操作及正则匹配。同时,讲解了文档游标的使用,如limit、skip、count和sort方法,以及如何进行文档投影来选择性返回字段。
摘要由CSDN通过智能技术生成

1. find 读取文档

db.<collection>.find(<query>,<projection>)

  • query : 定义了读取操作时筛选文档的条件
  • projection : 定义了对读取结果进行的投射,也就是只返回某些字段

1.1 读取文档

不进行筛选和投射

> db.user.find()
{ "_id" : "1", "money" : 1000, "name" : "刘一" }
{ "_id" : "2", "money" : 1000, "name" : "陈二" }
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "4", "money" : 1000, "name" : "李四" }
{ "_id" : "5", "money" : 1000, "name" : "王五" }
{ "_id" : "6", "money" : 1000, "name" : "赵六" }
{ "_id" : "7", "money" : 1000, "name" : "孙七" }
{ "_id" : ObjectId("5fff6a78025e5d9ea86e18cc"), "money" : 1000, "name" : "周八" }
{ "_id" : { "age" : 18, "gender" : "男" }, "money" : 1000, "name" : "吴九" }
> 

查询 name 为 张三的文档

> db.user.find({"name":"张三"})
{ "_id" : "3", "money" : 1000, "name" : "张三" }
> 

1.2 pretty 格式化显示文档

> db.user.find().pretty()
{ "_id" : "1", "money" : 1000, "name" : "刘一" }
{ "_id" : "2", "money" : 1000, "name" : "陈二" }
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "4", "money" : 1000, "name" : "李四" }
{ "_id" : "5", "money" : 1000, "name" : "王五" }
{ "_id" : "6", "money" : 1000, "name" : "赵六" }
{ "_id" : "7", "money" : 1000, "name" : "孙七" }
{
	"_id" : ObjectId("5fff6a78025e5d9ea86e18cc"),
	"money" : 1000,
	"name" : "周八"
}
{
	"_id" : {
		"age" : 18,
		"gender" : "男"
	},
	"money" : 1000,
	"name" : "吴九"
}
> 

1.3 筛选文档:比较操作符

{<field>:{$<operator>:<value>}}

比较操作符 $<operator>

  • $eq : 匹配字段值相等的文档
  • $ne : 匹配字段值不相等的文档
  • $gt : 匹配字段值大于查询值的文档
  • $gte : 匹配字段值大于或等于查询值的文档
  • $lt : 匹配字段值小于查询值的文档
  • $lte : 匹配字段值小于或等于查询值的文档
  • KaTeX parse error: Expected '}', got 'EOF' at end of input: …文档 `{<field>:{ in:[,…]}}`
  • KaTeX parse error: Expected '}', got 'EOF' at end of input: …文档 `{<field>:{ nin:[,…]}}`

查询 money 等于 1000的文档,和查询 money 大于 1000的文档

# 查询 money 等于 1000的文档
> db.user.find({"money":{$eq: 1000}})
{ "_id" : "1", "money" : 1000, "name" : "刘一" }
{ "_id" : "2", "money" : 1000, "name" : "陈二" }
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "4", "money" : 1000, "name" : "李四" }
{ "_id" : "5", "money" : 1000, "name" : "王五" }
{ "_id" : "6", "money" : 1000, "name" : "赵六" }
{ "_id" : "7", "money" : 1000, "name" : "孙七" }
{ "_id" : ObjectId("5fff6a78025e5d9ea86e18cc"), "money" : 1000, "name" : "周八" }
{ "_id" : { "age" : 18, "gender" : "男" }, "money" : 1000, "name" : "吴九" }
# 查询 money 大于 1000的文档
> db.user.find({"money":{$gt: 1000}})
> 

查询 name 为 张三或者赵六的文档

> db.user.find({"name":{$in: ["张三","赵六"]}})
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "6", "money" : 1000, "name" : "赵六" }
> 

1.3 筛选文档:逻辑操作符

逻辑操作符 $<operator>

  • $not 匹配筛选条件不成立的文档
  • $and 匹配多个筛选条件全部成立的文档
  • $or 匹配至少一个筛选条件成立的文档
  • $nor 匹配多个筛选条件全部不成立的文档

1.3.1 $and 匹配多个筛选条件全部成立的文档

{$and: [{<expression1>},{<expression2>},...,{<expressionN>}]}

查询 money<2000 , name = 张三 的文档

> db.user.find({$and: [{"money":{$lt:2000}},{"name":"张三"}]})
{ "_id" : "3", "money" : 1000, "name" : "张三" }
> 

字段名可以用双引号引起来,也可以不用双引号。

当筛选条件应用在不同的字段上时,可以省略 $and 操作符
查询 money<2000 , name = 张三 的文档,省略 $and

> db.user.find({money:{$lt:2000},name:"张三"})
{ "_id" : "3", "money" : 1000, "name" : "张三" }
> 

当筛选条件应用在同一个字段上时,也可以简化命令
查询 money > 500 且 money < 2000 的文档

> db.user.find({money:{$gt:500, $lt:2000}})
{ "_id" : "1", "money" : 1000, "name" : "刘一" }
{ "_id" : "2", "money" : 1000, "name" : "陈二" }
{ "_id" : "3", "money" : 1000, "name" : "张三" }
{ "_id" : "4", "money" : 1000, "name" : "李四" }
{ "_id" : "5", "money" : 1000, "name" : "王五" }
{ "_id" : "6", "money" : 1000, "name" : "
Java 程序设计: 一.DFA.java 为 DFA.java 中的 DFA 类实现成员函数 boolean recongnizeString(int move[][], int accept_state[], String word),函数功能和参数说明如下。 函数功能:如果 word 被 move 和 accept_state 所代表的 DFA 识别,则返回 true,否 则返回 false. 参数说明: 1) move[][]是状态迁移函数,move 的每一行代表一个状态,每一列代表一个输入符 号,第 0 列代表’a’,第 1 列代表’b’,……,依此类推. 例如:move ={{1,0}, {1,2}, …},则表示此 DFA 在状态 0 时,当输入为’a’时,迁移到状态 1,当输入为’b’ 时迁移到状态 0;而 DFA 在状态 1 时,当输入为’a’时,迁移到状态 1,当输入为’b’ 时迁移到状态 2. 注意:默认状态0是DFA的初始状态. 2) accept_state[]是接受状态的集合,如 accept_state[] = {2, 3},则表示状态 2 和状态 3 是接受状态. 3) word 是待识别的字符串. 注意事项: 1) 字符串 word 的长度在1到50之间. 2) move 的状态数在1到50之间,输入符号数在1到26之间. 3) 只须实现 recognizeString 函数,注意不要修改 DFA.java 文件中其它部分的内容(如 果修改了,请在提交之前改回来),更不要修改 recognizeString 的函数名,参数和 返回类型. 但可以为 DFA 类添加新的成员变量和成员函数. 4) DFA.in 文件是整个程序的输入文件,在本地机器上调试或测试程序时,可以修改 DFA.in 中的内容(用 Editplus 或记事本都可以打开修改),但遵照 DFA.in 的文件格 式. DFA.in 的格式示例如下: 4 2 ----DFA有4个状态,2个输入符号 1 0 ----接下来的 4 行 2 列代表状态迁移函数 1 2 1 3 1 0 3 ----这一行代表接收状态,若有多个用空格隔开 aaabb ----接下来的每行代表一个待识别的字符串 abbab abbaaabb abbb # ----‘#’号代表待识别的字符串到此结束 1 3 ----新的 DFA 开始,格式同上一个 DFA 0 0 0 0 cacba # 0 0 ----两个 0 代表所有输入的结束 5) 当 DFA.in 内容如 4) 时,屏幕应输出 YES NO YES NO YES
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值