mongo学习

个人根据官网学习过程笔记,回头时可以很快回忆
在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,然后可以是另一个满足17
db.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,lte
exists: {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'}}) 搜索了value
all: {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默认为0
rename: 改名  ({..},{$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都匹配了才pull
pushAll: {$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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大家这么喜欢,我就不要资源分了,改成0分了,我为我一己私利感到抱歉…… MongoDB学习手册 ......................................................................................................................... 1 说明.......................................................................................................................................... 2 一、 Mongodb简介 .......................................................................................................... 4 二、 MongoDB特性 ......................................................................................................... 5 适用场景: ....................................................................................................................... 5 不适用场景: ................................................................................................................... 6 三、 MongoDB的工作方式.............................................................................................. 6 四、 MongoDB的下载 ..................................................................................................... 8 五、 MongoDB的安装 ..................................................................................................... 9 六、 MongoDB数据类型................................................................................................ 12 1. Timestamp类型 ...................................................................................................... 12 2. ObjectId类型 .......................................................................................................... 12 3. 数据库关联 ............................................................................................................. 14 七、 GridFS文件系统 ..................................................................................................... 15 八、 索引 ......................................................................................................................... 16 九、 主(Master)/从(slave)数据库同步 ................................................................ 20 1. 建立主/从服务器 ................................................................................................... 20 2. 相关参数说明 ......................................................................................................... 21 3. Slave顶替Master ................................................................................................... 22 4. 切换Master/Slave角色 ......................................................................................... 22 5. 更新主服务器位置 ................................................................................................. 22 十、 MongoDB分片和集群............................................................................................ 24 1. 简单分片实例 ......................................................................................................... 24 2. 高级分片实例 ......................................................................................................... 29 十一、 数据库基本操作:增查删改 ............................................................................. 37 1. Insert ....................................................................................................................... 37 2. Query ....................................................................................................................... 38 3. Remove.................................................................................................................... 52 4. Update ..................................................................................................................... 53 十二、 Shell控制台 ........................................................................................................ 62 1. 执行.js文件 ............................................................................................................ 62 2. –eval ........................................................................................................................ 62 3. 脚本和互动的区别 ................................................................................................. 62 十三、 安全与认证 ......................................................................................................... 63 1) 开启安全认证 ......................................................................................................... 63 2) 添加用户 ................................................................................................................. 64 3) 认证 ......................................................................................................................... 64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值