zoukankan      html  css  js  c++  java
  • 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


     

  • 相关阅读:
    python3 crypto winrandom import error
    Flask-Babel 中文支持(zh-CN和zh-Hans-CN)
    pip 安装psycopg的错误
    Aapache status / apache2ctl status 总是403
    为什么你还在用嵌入式的方式来使用mod_wsgi?
    Git中当add错误的时候怎么办?
    Python 内置彩蛋
    本人AI知识体系导航
    本人SW知识体系导航
    SSH密钥对登录的原理和实践
  • 原文地址:https://www.cnblogs.com/snow-backup/p/2961947.html
Copyright © 2011-2022 走看看