MongoDB 第5章 MongoDB高级查询(mongodb数据库)
478
2022-05-29
查
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的文档
正则 {
查询其他操作
映射 字段选择: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); }
MongoDB 面向对象编程
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。