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除以41的结果$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}})  itemnumbernumber乘以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:""}}minmax:  {$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中的所有23  , 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

0 0
原创粉丝点击