mongodb 常用命令

use test_database

show collections

db.table_name.renameCollection("new_name")

db.createColletion("table_name")

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

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

db.table.findOne() return dict  

db.table.find() return cursor

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

数据表帮助主题help

db.Account.help()

 db.Account.find().help()

DBQuery.shellBatchSize = 20(default) 

  • Start server: mongod –dbpath C:mongodbdatadb3
  • Start client: mongo

Advanced command: mongo –host 127.0.0.1 –port 27017

  • Client command: (the green part is mutable)

         List all databases: show databases

         Change database: use test_database

         List all table: show collections

          Count: db.table_name.find().count()

         Drop table: db.table_name.drop()

         Create index: db.table_name.createIndex({“class_name”:1, “method_name”:1})

                               db.table_name.ensureIndex({“class_name”:1, “method_name”:1})

         drop indexes: db.table_name.dropIndexes()

         update: db.table_name.update(condition, data)

                      condition like: {“_id”:ObjectId(“xxxx”)},  data like: {“$set”:{“access_flag”:xxx}}, 如果不用$set, 则会覆盖整条数据而不是更新。

                     批量更改,某一列等于另一列的值:

                     db.getCollection('TestCase').find({"csv.total_lines":{"$exists":"true"}}).forEach(
                          function(item){
                          db.getCollection('TestCase').update({"_id":item._id},{"$set":{"expect":item.csv.total_lines}},multi=true)
                          }
                     )

         remove: db.table_name.remove(condition)

         Query:

             db.table_name.find({“class_name”:xxx, “method_name”:xxx})

             db.table_name.find({age:{$lt:30}}).hint({name:1, age:1}).explain()    ---红色部分强制使用索引

             指定显示name, age两列:db.table_name.find({}, {name:1, age:1})

             嵌套:{name:'Tom', contact: {email:"xx@126.com", phone:88837776}}

                     db.table_name.find({'contact.email':{$regex:'126.com'}}, {'name':1, 'contact.email':1})

         db.table_name.find({'name':'Tom', {$or:[{a:1}, {b:2}]}})

             db.table_name.find({'name':{$exists:true}})

             如果表内数据很多,查询会因timeout而失败,这时候要将timeout参数设为flase:

                 db.table_name.find(timeout=False)

         field是数组的查询:

         db.table.find({field1: {$in:['aa', 'bbb]}}) 把field1 为aa 和bb的纪录都查找出来

         db.table.find({field1: {$all:['aa', 'bbb']}}) 查询field1数组中同时存在 aa, bb的纪录

         获取表头(pymongo)

         list(sorted(self.db['table'].find_one().__iter__()))

  • stop server or client: ctrl + c


 

原文地址:https://www.cnblogs.com/snow-backup/p/2961947.html