MongoDB数据表基本操作

时间:2021-12-19 04:45:57

查看全部数据表

>  use ChatRoom
switched to db ChatRoom
>  show collections
Account
Chat
system.indexes
system.users

 

创建数据表

>  db.createCollection( " Account " )
{
" ok " : 1 }

 

> db.createCollection( " Test " ,{capped:true, size: 10000 }) { " ok " : 1 }

{ " ok " : 1 }

-- 说明

capped:true,表示该集合的结构不能被修改;

size:在建表之初就指定一定的空间大小,接下来的插入操作会不断地按顺序APPEND数据在这个预分配好空间的文件中,如果已经超出空间大小,则回到文件头覆盖原来的数据继续插入。这种结构保证了插入和查询的高效性,它不允许删除单个记录,更新的也有限制:不能超过原有记录的大小。这种表效率很高,它适用于一些暂时保存数据的场合,比如网站中登录用户的session信息,又比如一些程序的监控日志,都是属于过了一定的时间就可以被覆盖的数据。

 

修改数据表名

>  db.Account.renameCollection( " Account1 " )
" ok "  :  1  }

 

数据表帮助主题help

>  db.Account.help()
DBCollection help
        db.Account.find().help() 
-  show DBCursor help
        db.Account.count()
        db.Account.dataSize()
        db.Account.distinct( key ) 
-  eg. db.Account.distinct(  ' x '  )
        db.Account.drop() drop the collection
        db.Account.dropIndex(name)
        db.Account.dropIndexes()
        db.Account.ensureIndex(keypattern[,options]) 
-  options  is  an object with these possible fields: name, unique, dropDups
        db.Account.reIndex()
        db.Account.find([query],[fields]) 
-  query  is  an optional query filter. fields  is  optional set of fields to  return .
                                                      e.g. db.Account.find( {x:
77 } , {name: 1 , x: 1 } )
        db.Account.find(...).count()
        db.Account.find(...).limit(n)
        db.Account.find(...).skip(n)
        db.Account.find(...).sort(...)
        db.Account.findOne([query])
        db.Account.findAndModify( { update : ... , remove : bool [, query: {}, sort: {}, 
' new ' : false] } )
        db.Account.getDB() get DB object associated with collection
        db.Account.getIndexes()
        db.Account.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } )
        db.Account.mapReduce( mapFunction , reduceFunction , 
< optional params >  )
        db.Account.remove(query)
        db.Account.renameCollection( newName , 
< dropTarget >  ) renames the collection.
        db.Account.runCommand( name , 
< options >  ) runs a db command with the given name where the first param  is  the collection name
        db.Account.save(obj)
        db.Account.stats()
        db.Account.storageSize() 
-  includes free space allocated to this collection
        db.Account.totalIndexSize() 
-  size  in  bytes of all the indexes
        db.Account.totalSize() 
-  storage allocated  for  all data  and  indexes
        db.Account.update(query, object[, upsert_bool, multi_bool])
        db.Account.validate() 
-  SLOW
        db.Account.getShardVersion() 
-  only  for  use with sharding

 

查看全部表记录

>  db.Account.find()
" _id "  : ObjectId( " 4df08553188e444d001a763a " ),  " AccountID "  :  1 " UserName "  :  " libing " " Password "  :  " 1 " " Age "  :  26 " Email "  :  " libing@126.com " " RegisterDate "  :  " 2011-06-09 16:31:25 "  }
" _id "  : ObjectId( " 4df08586188e444d001a763b " ),  " AccountID "  :  2 " UserName "  :  " lb " " Password "  :  " 1 " " Age "  :  25 " Email "  :  " libing@163.com " " RegisterDate "  :  " 2011-06-09 16:36:95 "  }

 

--SELECT * FROM Account

 

说明:

 

默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。
可以通过DBQuery.shellBatchSize设置每页显示数据的大小。如:DBQuery.shellBatchSize = 5,这样每页就显示5条记录了。

 

>  db.Test.find()
" _id "  : ObjectId( " 4df6d55407444568af61cfea " ),  " TestID "  :  1  }
" _id "  : ObjectId( " 4df6d55907444568af61cfeb " ),  " TestID "  :  2  }
" _id "  : ObjectId( " 4df6d55b07444568af61cfec " ),  " TestID "  :  3  }
" _id "  : ObjectId( " 4df6d55e07444568af61cfed " ),  " TestID "  :  4  }
" _id "  : ObjectId( " 4df6d56207444568af61cfee " ),  " TestID "  :  5  }
" _id "  : ObjectId( " 4df6d56507444568af61cfef " ),  " TestID "  :  6  }
" _id "  : ObjectId( " 4df6d56807444568af61cff0 " ),  " TestID "  :  7  }
" _id "  : ObjectId( " 4df6d56b07444568af61cff1 " ),  " TestID "  :  8  }
" _id "  : ObjectId( " 4df6d56e07444568af61cff2 " ),  " TestID "  :  9  }
" _id "  : ObjectId( " 4df6d57a07444568af61cff3 " ),  " TestID "  :  10  }
" _id "  : ObjectId( " 4df6d57d07444568af61cff4 " ),  " TestID "  :  11  }
" _id "  : ObjectId( " 4df6d58007444568af61cff5 " ),  " TestID "  :  12  }
" _id "  : ObjectId( " 4df6d58307444568af61cff6 " ),  " TestID "  :  13  }
" _id "  : ObjectId( " 4df6d58e07444568af61cff7 " ),  " TestID "  :  14  }
" _id "  : ObjectId( " 4df6d59207444568af61cff8 " ),  " TestID "  :  15  }
" _id "  : ObjectId( " 4df6d59607444568af61cff9 " ),  " TestID "  :  16  }
" _id "  : ObjectId( " 4df6d59c07444568af61cffa " ),  " TestID "  :  17  }
" _id "  : ObjectId( " 4df6d5a307444568af61cffb " ),  " TestID "  :  18  }
" _id "  : ObjectId( " 4df6d5a607444568af61cffc " ),  " TestID "  :  19  }
>  DBQuery.shellBatchSize
20
>  DBQuery.shellBatchSize  =   5
5
>  db.Test.find()
" _id "  : ObjectId( " 4df6d55407444568af61cfea " ),  " TestID "  :  1  }
" _id "  : ObjectId( " 4df6d55907444568af61cfeb " ),  " TestID "  :  2  }
" _id "  : ObjectId( " 4df6d55b07444568af61cfec " ),  " TestID "  :  3  }
" _id "  : ObjectId( " 4df6d55e07444568af61cfed " ),  " TestID "  :  4  }
" _id "  : ObjectId( " 4df6d56207444568af61cfee " ),  " TestID "  :  5  }
has more
>  it
" _id "  : ObjectId( " 4df6d56507444568af61cfef " ),  " TestID "  :  6  }
" _id "  : ObjectId( " 4df6d56807444568af61cff0 " ),  " TestID "  :  7  }
" _id "  : ObjectId( " 4df6d56b07444568af61cff1 " ),  " TestID "  :  8  }
" _id "  : ObjectId( " 4df6d56e07444568af61cff2 " ),  " TestID "  :  9  }
" _id "  : ObjectId( " 4df6d57a07444568af61cff3 " ),  " TestID "  :  10  }
has more
>  it
" _id "  : ObjectId( " 4df6d57d07444568af61cff4 " ),  " TestID "  :  11  }
" _id "  : ObjectId( " 4df6d58007444568af61cff5 " ),  " TestID "  :  12  }
" _id "  : ObjectId( " 4df6d58307444568af61cff6 " ),  " TestID "  :  13  }
" _id "  : ObjectId( " 4df6d58e07444568af61cff7 " ),  " TestID "  :  14  }
" _id "  : ObjectId( " 4df6d59207444568af61cff8 " ),  " TestID "  :  15  }
has more
>  it
" _id "  : ObjectId( " 4df6d59607444568af61cff9 " ),  " TestID "  :  16  }
" _id "  : ObjectId( " 4df6d59c07444568af61cffa " ),  " TestID "  :  17  }
" _id "  : ObjectId( " 4df6d5a307444568af61cffb " ),  " TestID "  :  18  }
" _id "  : ObjectId( " 4df6d5a607444568af61cffc " ),  " TestID "  :  19  }
>  it
no cursor

 

查询一条记录

>  db.Account.findOne()
{
        
" _id "  : ObjectId( " 4ded95c3b7780a774a099b7c " ),
        
" UserName "  :  " libing " ,
        
" Password "  :  " 1 " ,
        
" Email "  :  " libing@126.cn " ,
        
" RegisterDate "  :  " 2011-06-07 11:06:25 "
}

--SELECT TOP 1 * FROM Account

 

 查询聚集中字段的不同记录

>  db.Account.distinct( " UserName " )

--SELECT DISTINCT("UserName")  FROM Account

 

 查询聚集中UserName包含“keyword”关键字的记录

db.Account.find({ " UserName " : / keyword / })

 --SELECT * FROM Account WHERE UserName LIKE '%keyword%'

 

查询聚集中UserName以"keyword" 开头的记录

>  db.Account.find({ " UserName " : /^ keyword / })

--SELECT * FROM Account WHERE UserName LIKE 'keyword%'

 

查询聚集中UserName以“keyword”结尾的记录

>  db.Account.find({ " UserName " : / keyword$ / })

--SELECT * FROM Account WHERE UserName LIKE '%keyword'

 

查询聚集中指定列

>  db.Account.find({},{ " UserName " : 1 , " Email " : 1 })    --1:true

--SELECT UserName,Email FROM Account

 

 查询聚集中排除指定列

>  db.Account.find({},{ " UserName " :0})    --0:false

 

查询聚集中指定列,且Age > 20

>  db.Account.find({ " Age " :{ " $gt " : 20 }},{ " UserName " : 1 , " Email " : 1 })

--SELECT UserName,Email FROM Account WHERE Age > 20

 

聚集中字段排序

>  db.Account.find().sort({ " UserName " : 1 })  --  升序
>  db.Account.find().sort({ " UserName " : - 1 })  -- 降序

--SELECT * FROM Account ORDER BY UserName ASC

--SELECT * FROM Account ORDER BY UserName DESC

 

统计聚集中记录条数

>  db.Account.find().count()

--SELECT COUNT(*) FROM Account

 

统计聚集中符合条件的记录条数

>  db.Account.find({ " Age " :{ " $gt " : 20 }}).count()

-- SELECT COUNT(*) FROM Account WHERE Age > 20

 

统计聚集中字段符合条件的记录条数

>  db.Account.find({ " UserName " :{ " $exists " :true}}).count()

--SELECT COUNT(UserName) FROM Account

 

查询聚集中前5条记录

>  db.Account.find().limit( 5 )

--SELECT TOP 5 * FROM Account

 

查询聚集中第10条以后的记录

>  db.Account.find().skip( 10 )

--SELECT * FROM Account WHERE AccountID NOT IN (SELECT TOP 10 AccountID FROM Account)

 

查询聚集中第10条记录以后的5条记录

>  db.Account.find().skip( 10 ).limit( 5 )

--SELECT TOP 5 * FROM Account WHERE AccountID NOT IN (SELECT TOP 10 AccountID FROM Account)

 

or查询

>  db.Account.find({ " $or " :[{ " UserName " : / keyword / },{ " Email " : / keyword / }]},{ " UserName " :true, " Email " :true})

--SELECT UserName,Email FROM Account WHERE UserName LIKE '%keyword%' OR Email LIKE '%keyword%'

 

添加新记录

>  db.Account.insert({AccountID: 2 ,UserName: " lb " ,Password: " 1 " ,Age: 25 ,Email: " libing@163.com " ,RegisterDate: " 2011-06-09 16:36:95 " })

修改记录

>  db.Account.update({ " AccountID " : 1 },{ " $set " :{ " Age " : 27 , " Email " : " libingql@163.com " }})
>  db.Account.find({ " AccountID " : 1 })
" AccountID "  :  1 " Age "  :  27 " Email "  :  " libingql@163.com " " Password "  :  " 1 " " RegisterDate "  :  " 2011-06-09 16:31:25 " " UserName "  :  " libing " " _id "  : ObjectId( " 4df08553188e444d001a763a " ) }

 

>  db.Account.update({ " AccountID " : 1 },{ " $inc " :{ " Age " : 1 }})
>  db.Account.find({ " AccountID " : 1 })
" AccountID "  :  1 " Age "  :  28 " Email "  :  " libingql@163.com " " Password "  :  " 1 " " RegisterDate "  :  " 2011-06-09 16:31:25 " " UserName "  :  " libing " " _id "  : ObjectId( " 4df08553188e444d001a763a " ) }

 

删除记录

>  db.Account.remove({ " AccountID " : 1 })  -- DELETE FROM Account WHERE AccountID  =   1

 

>  db.Account.remove({ " UserName " : " libing " })  -- DELETE FROM Account WHERE UserName  =   ' libing '

 

>  db.Account.remove({ " Age " :{$lt: 20 }})  -- DELETE FROM Account WHERE Age  <   20
>  db.Account.remove({ " Age " :{$lte: 20 }})  -- DELETE FROM Account WHERE Age  <=   20
>  db.Account.remove({ " Age " :{$gt: 20 }})  -- DELETE FROM Account WHERE Age  >   20
>  db.Account.remove({ " Age " :{$gte: 20 }})  -- DELETE FROM Account WHERE Age  >=   20
>  db.Account.remove({ " Age " :{$ne: 20 }})  -- DELETE FROM Account WHERE Age  !=   20

 

>  db.Account.remove()     -- 全部删除
>  db.Account.remove({})   -- 全部删除