mongo学习
来源:互联网 发布:mysql删除表数据 编辑:程序博客网 时间:2024/06/03 22:39
个人根据官网学习过程笔记,回头时可以很快回忆
在mongo 的shell中
show dbs
use db(还没有写入数据库)
db.collection.insert({})(插入数据,同时也会有数据了)
db.collection.insertOne({})
db.collection.insertMany([])
db.dropDatabase()删除数据库
db.collection.drop()删除集合
db.collection.find()
dd = ({item:12,item1:”wq”})
db.col.insert(dd) or db.col.save(dd) ps:同一个dd,save多次只有一个,dd重新赋值后,内容相同,也会再save一份;如果dd中有 _id,那么就是update;如果insert,可以插入多个
db.col.update({‘item’:’value’},{$set:{‘改变值得item’:’values’}},{multi:true}) ,multi:true 决定是否更新多个匹配的title,否则只更新一个,如果直接({},{}),那么符合条件的就会被覆盖
db.col.remove({query},true) true只删除一个
and: db.col.find({‘item1’:”value”,”item2”:”value2”})
or: db.col.find({“$or”:[{“item1”:”value”}, {“item2”,”value”}]})
db.col.find({“wq”:{$type:7}}) 按照wq的类型查找
db.col.find({},{“title”:1,_id:0}).limit(2) limit,只显示两条
db.col.find({},{“title”:1,_id:0}).skip(1) skip 跳过前面的1条,从第二条开始
db.COLLECTION_NAME.find().sort({KEY:1}) sort()方法可以通过参数指定排序的字段 1 升序,-1降序 注: 如果没有指定sort()方法的排序方式,默认按照文档的升序排列。
db.col.ensureIndex({KEY:1}) Key 要创建的索引字段,1升序创建索引,降序为-1。
db.col.aggregate([{group:{_id:"item1",r:{sum:1}}}]) 总和, 其他平均avg, min, max 等不会
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});只显示了title,author,id没有显示db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );匹配后分组db.article.aggregate( { $skip : 5 });跳过前五
db.col.find({item:{in:[ value, value,]}})
db.col.find({“item.subitem”:{in:[ value, value,]}})
----start-----"item":[value1,value2]db.col.find({item:[value1,value2]})db.col.find({item:value1}) 包含一个db.col.find({"item.0":value1}) index的值对上db.col.find({item:{$gt:15, $lt:17}}) 经测试,应该是有一个先满足了15,然后可以是另一个满足17db.col.find({item:{$elemMatch:{$gt:15, $lt:17}}}) array中的某个元素满足15-17-----end-------db.col.find({匹配条件},{显示条件}):除了id外,其他的要么全1,表示只显示这几个,要么全0,表示除了这几个其他的都显示,不能组合排除和包含语句 db.col.find({_id:1},{name:1,item2:1, _id:0})包含 db.col.find({_id:1},{name:0,"item2.subitem":0, _id:0})排除 db.col.find({..},{item:{$slice:-1}}) item是[],-1:最后一组,2前两组数据db.col.find({item:{$exists:false|true}}) item是否存在更新db.col.update({..匹配},{item:value..},{multi:true}) 相当于直接替换,或者 update({..匹配},{$set:{item:value},$currentDate:{item:true}}) 更新部分db.col.replaceOne({..匹配},{替换的内容,json文档内容}) 和 db.col.update({},{}) 很像{$currentDate:{item:true}} 更新item时间为当前时间还未测试:db.collection.findOneAndReplace().db.collection.findOneAndUpdate().db.collection.findAndModify().db.collection.save().db.collection.bulkWrite().删除db.col.deleteOne({..})db.col.deleteMany({..匹配条件}) 或 deleteMany({})删除所有db.col.remove() 和deletemany差不多 remove({..},1) 只删除一个db.col.drop() 删除所有,更高效查询:ne: db.col.find({item:{$ne:2}}) item的值不等于2或者没有item这个key的nin: {item:{$nin:[value1..]}} ne和这个效果差不多in: {item:{$in:[value1,value2..]}} item是array或int,str单个的值,value可以为int,str等,可以用/pattern/这样形式的正则表达式,[/^be/] be开头的字符串,其他的不行, #**各自语言使用各自的正则表达式python中使用 re re.compile("^be")**eq: 如果item是array,item:{$eq:2} 和 item:2 都是查找item包含2的, item是其他,效果和 item:value 一样gt,gte,lt,lteexists: {item:{$exists:boolean}}type: {item:{$type:1}} == {item:{$type:'double'}}
[ type ]有很多值
{item:{$type:'number'}} 这个会返回{item:{$mod:[4,1]}} item除以4余1的结果$text $search: 先创建索引,db.col.createIndex({item:'text'}), db.col.find({$text:{$search:'value'}}) 搜索了valueall: {item:{$all:[value1,value2]}} item通常是数组elemMatch: {item:{$elemMatch:{query1,query2..}}} item的数据,满足query所有的条件 {item:{$elemMatch:{subitem:value, subitem:{query}}}} 满足子条件size: {item:{$size:2}} item必须是array,返回array个数是2的结果$comment:注释 {item:value, $comment:''}$: db.collection.find( { <array>: <value> ... }, { "<array>.$": 1 } ) db.collection.find( { <array.field>: <value> ...},{ "<array>.$": 1 } ) 显示满足条件的array的第一个元素find({queryes},{item:{$elemMatch:{..}}}) 查找queryes符合的元素,返回时,关于item的内容,只返回elemMatch中匹配的元素,其他的比如 _id 都会返回db.col.find({},{item:{$slice:5}}) 前五个, -5: 最后五个 {item:{$slice:[skip,limit]}} 跳过skip,limit个,skip为负数,则是倒着数or: db.col.find({"$or":[{query1}, {query2}]})and: 和or一样not: { field: { $not: { query } } } 和query相反,包括field不存在的nor: {$nor:[{query1},{item:100}..]} 返回与query相反的结果,多个query之间是或的关系,包括item不存在的这些取反结果的,会取item不存在的,可以使用{item:{$exists:false}}查找item的相反结果
更新 操作符inc: 增加值 db.col.update({..},{$inc:{item:amount1, item2:amount2..}}) amount可以为负数,mul: 原值翻倍 db.col.update({..},{$mul:{item:number}}) item为number,number乘以item原来的值,如果item不存在,则item默认为0rename: 改名 ({..},{$rename:{item:newitemname1,item.subitem:newitem, item1: newitem.subitem}}) 用点符号的必须是dict newitem存在则覆盖setOnInsert: update时,在目标不存在且创建的时候触发 ({id:1},{query, $setOnInsert:{name:'wq'}},{upsert:true}) 没找到id 1 的,那么创建id1,和query,然后才执行set: ({..},{$set:{item:value, "item.subitem":"value"}})unset: {$unset:{item:"", item2:""}}min,max: {$min:{item:15}} 取item原值和15的最小值为item, 或者日期比较, {$max:{date:new Date("0202-01-09")}}currentDate: {$currentDate:{login:true,date:{$type:'timestamp'}}} 更新时,login当前时间,date当前时间戳,也可以用$type:'date'$: ({item:1},{$set:{'item.$':111}}) 猜测:item限于array,查询时用到了item,那么在后面set时,才能使用item.$ item.s的item要在查询中调用each: {$addToSet:{item:{$each:[1,2,3,4,5,5]}}} 给push和addToSet增加多个值用的list: {$pop:{item:1}} 弹出一个元素,item一定是array,1:弹最后一个,最右边的, -1: 弹头一个,最左边的, 其他数字无效,看正负pullAll: {$pullAll:{item:[2,3]}} item是array,删除item中的所有2,3 , 2,3也是放在array中的pull: {$pull:{item:value, item2:{$gt:7}}} 单个,item2小于7的都删除 {$pull:{item:{$in:[1,2,3]}}} 数组, {$pull:{item:{subitem:1,subitem2:2}}} item是一个array,subitem是单个子项的值,是dict,那么两个sub都匹配了才pullpushAll: {$pushAll:{item:[1,2,3,4,5,]}}push: {$push:{item:value}} item 是array {$push:{item:{$each[1,2,3,4], $sort:{item2:-1}, $slice:3}}} push完后,按照item2降序,保留3个slice: update中,**slice和each一起用** {$push:{item:{$each[], $slice:3}}} 至少each也要是[],搜则报错sort: {$push:{item:{$each:[],$sort:1}}} **update中要和each一起用**,至少也是[],1 和 -1 是排序方向, 不能使用 ‘item.subitem’: 1,,但是{$push:{item:{$each:[],$sort:{subitem:1}}}} 那么对subitem是排序了的 1是升序,-1是降序position: **必须与 each修饰符一起出现** {$push:{item:{$each:[1,2],$position:0}}} 添加在头部 -> 1,2,3 不是 3,1,2
aggregate,统计部分暂时用不到,以后再说project: 一些用法 db.col.aggregate([{$project:{item1:1,item2:1,_id:0}}]) 结果显示item1,item2, _id隐藏(默认显示)
游标:
var m = db.col.find({..})
打印下一个
print(tojson(m.next()))
printjson(m.next())
m.forEach(printjson)
一些暂时跳过或没明白的、其他:
MongoDB复制原理
minkey和maxkey
where 少用 db.myCollection.find( { $where: “this.credits == this.debits” } );
可以按位查询,匹配数值或二进制
mate
bit
isolated
- mongo 学习
- mongo学习
- mongo学习
- mongo学习笔记
- Mongo学习笔记(1)
- Mongo 学习总结《一》
- mongo的学习
- Mongo学习笔记
- mongo学习之二
- Mongo 学习笔记--Capped Collection
- mongo 学习三--mongodb 数据类型
- mongo的关键字学习一
- Mongo学习笔记(一)
- mongo学习笔记(一)
- Mongo 基础学习系列 一 Linux下Mongo安装
- MONGO
- mongo
- mongo
- 关于pokeman go
- linux内核源码树建立
- 错误 强制类型转换错误 查出来是对象类 无法强制转换为list
- maven的配置及一些常用命令
- Eclipse+Maven创建webapp项目
- mongo学习
- Matlab/C++混合编程中数据保存与使用
- Spring源码深度解析(一)Spring的整体架构
- 关于无需安装oracle数据库 使用plsql
- 贪心算法
- 计算机网络第一章
- 【09】【矩阵数据访问】详细注释
- Android 自定义View的post(Runnable)方法非100%执行引起的问题定位
- id_rsa are too open 的处理