253_Mongodb_增删改查_查find

举报
alexsully 发表于 2021/12/17 15:54:53 2021/12/17
【摘要】 查询

find() 
findone()  查询出符合条件的第一个文档(只返回第一个)

db.inventory.findOne({"qty":100},{_id:0})
db.inventory.find({"qty":100})
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。 1 显示此字段, 0 不显示此字段 {“_id”:0} 
查询时返回文档中所有键值,只需省略该参数即可(默认省略)
需要以易读的方式来读取数据,可以使用 pretty() 方法;

查询操作符

操作符类型

运算符

描述

比较

$eq

$ne

等于

不等于

 

$lt

$lte

小于

小等于

 

$gt

$gte

大于

大等于

 

$in

$nin

判断元素是否在只读的集合范围内

判断元素是否不在指定的集合范围里

 

$all

判断数组中是否包含某几个元素,无关顺序

 

 

 

逻辑运算

$and

连接多个查询条件,查询的文档都要满足条件

 

$nor

连接多个查询条件,查询的文档都不满足条件 与and相反

 

$or

有一个条件成立则匹配

 

$not

只可用于一个查询条件, 查询出的文档不符合该条件

 

 

 

元素操作符

$exists

判断元素是否存在,

若为true, 表文档数据必须符合存在条件,

若为false,表示文档数据必须符合不存在条件

 

$type

依照字段的类型进行筛选

 

 

 

评估操作符号

$expr

对文档两个字段进行比较,今儿查询出符合条件

 

$mod

取余条件, 表查询出符合余数条件的文档

 

 

 

其他

.

内嵌 & 子文档匹配

 

$regex

正则表达式匹配含有相关条件的文档

采用 PCRE(perl compatible regular expression) 来支持正则表达式

#find & findone

db.inventory.findOne({"item":"apple"},{_id:0})
db.inventory.find({"qty":"apple"})

db.inventory.findOne({"qty":100},{_id:0})
db.inventory.find({"qty":100})


// 内嵌文档多个字段匹配
// 下面两个语句查询效果不一样,因为查询的字段顺序不一样
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
db.inventory.find( { size: { w: 21, h: 14, uom: "cm" } } )

// 数组查询
// 匹配确切的数组内容,包括元素顺序
db.inventory.find( { tags: ["blank", "red", "small"] } )
db.inventory.find( { tags: ["red", "blank"] } )
// 不考虑顺序和其他元素
db.inventory.find( { tags: { $all: ["red", "blank"] } } )
// length数组中至少有一个元素,满足$elemMatch的条件
db.inventory.find( { length: { $elemMatch: {$gte:30, $lt:80} } } )
// tags数组大小为3的记录
db.inventory.find( { "tags": { $size: 3 } } )

# 1 比较操作符
db.inventory.find({"tags": {$in: ["red", "big"] }})
db.inventory.find({"qty":{$lte:150}})


# 2 逻辑操作符
db.inventory.find({$and:[{"qty":{$lte:150}}, {"tags": {$in:["red", "big"]}}] })

db.inventory.find({"qty": {$not: {$lte: 100}}})
db.inventory.find({"item": {$not: {$eq: "orange"}}}) 



# 3 元素操作符
db.inventory.find().size() //15
db.inventory.find({"tags": {$exists:true}}).size()  //8
db.inventory.find({"tags" : { $type : "array"}})

# 4 评估操作符

db.inventory.find({$expr: {$lt:["$字段1","$字段2"]}})  查询字段1值小于字段字段2的文档

正则

{<field>: { $regex: /pattern/, $options: “<options>”} }
{<field>: { $regex: ‘pattern’, $options: “<options>”} }
{<field>: { $regex: /pattern/<options> } }

参数说明
$regex: /pattern/ $regex: ‘pattern’   $regex 操作符后加上字符串,可对字符串进行模糊查询
<options> 可选参数
“i” 忽略大小写, “x” 表忽略空格 “m” 数据为多行(\n)时,任意一条符合即可 “s” 将多行数据视为一行(\n 视为字符)

# 正则
#{ item: "postcard", qty: 45, tags: ["gray", "yellow", "green"], size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
db.inventory.find({"item": {$regex: "card", $options: "i"}})

查询其他操作

映射
字段选择:db.inventory.find({},{'item':1})
字段排除: db.inventory.find({},{'item':0})
数组子元素选择:db.inventory.find({},{'tags':{'$slice':[1,2]},'tags':1}) $slice可以取两个元素数组,分别表 示跳过和限制的条数;


排序
sort():db.orders.find().sort({'orderTime':1,'price':1}) 1:升序 2:降序

跳过和限制
skip(n):跳过n条数据
limit(n):限制n条数据 e.g:db.orders.find().sort({'orderTime':-1}).limit(5).skip(5)

查询唯一值

distinct():查询指定字段的唯一值 e.g:db.users.distinct("age")

数据校验

# 数据校验
前提: 拥有collMod 操作权限

1 创建集合的方式(db.createcollecton) 
通过添加validator, 从而在创建集合的时 建立验证规则 
	1.1 json schema验证模式
	1.2 查询表达式验证模式

无论哪种方式都要加上 validationAction, 可以设定为error & warn
error: 默认值 如果插入或更新违规,报错
warn: 如果插入/更新违规 告警

sonSchema
db.createCollection("ProductAlex", {

validator:{
$jasonschema: {
bsonType: "object", 
required: ["name", "weight"], 
properties: {name: {bsontype: "string"}, weight: {bsontype: "int", minimum:10, maximum: 100}},
validationAction: "warn"
}}
})

批量操作动作

// 批量写入操作
// 准备数据
db.characters.insertMany([
   { "_id" : 1, "char" : "Brisbane", "class" : "monk", "lvl" : 4 },
   { "_id" : 2, "char" : "Eldon", "class" : "alchemist", "lvl" : 3 },
   { "_id" : 3, "char" : "Meldane", "class" : "ranger", "lvl" : 3 }
]);
// 批量操作动作
try {
   db.characters.bulkWrite(
      [
         { insertOne :
            {"document" :
               {"_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4}
            }
         },
         { insertOne :
            {"document" :
					    	{ "_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3}
            }
         },
         { updateOne :
            {
               "filter" : { "char" : "Eldon" },
               "update" : { $set : { "status" : "Critical Injury" } }
            }
         },
         { deleteOne :
            { "filter" : { "char" : "Brisbane"} }
         },
         { replaceOne :
            {
               "filter" : { "char" : "Meldane" },
               "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 }
            }
         }
      ]
   );
} catch (e) {
   print(e);
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。