zoukankan      html  css  js  c++  java
  • Mongodb For Windows

    关于 mongodb管理与安全认证 请移步这里: Mongodb For Mac OSX && 登录验证

    安装mongodb

    1、 官网下载 mongodb,如果嫌慢还可以前往百度云盘
    2、 如果是安装包,那么安装方式选 Custom 这样可以自定义安装,比如将路径设置在 F:MongoDb</code> 如果是 压缩包 就不说什么了
    3、 创建日志

    a、 在安装目录下创建俩个文件夹 datadb 存放 数据
    b、 在 datalog 存放 日志
    c、 (可略)在 log 文件夹中再创建一个文本 MongoDb.log 即日志文件

    4、 运行命令行 (CMD、Bash) 都行,以Bash为例:

    $ cd /f/MongoDb/bin/
    $ mongod -dbpath "/f/MongoDb/data/db"
    
    2014-12-31T11:10:31.408+0800 [initandlisten] MongoDB starting : pid=5528 port=27
    017 dbpath=f:/MongoDb/data/db 64-bit host=highsea-PC
    2014-12-31T11:10:31.408+0800 [initandlisten] targetMinOS: Windows 7/Windows Serv
    er 2008 R2
    2014-12-31T11:10:31.408+0800 [initandlisten] db version v2.6.6
    2014-12-31T11:10:31.408+0800 [initandlisten] git version: 608e8bc319627693b04cc7
    da29ecc300a5f45a1f……以下省略
    

    可以看到 mongodb 已经启动,端口号:27017

    5、 测试连接 新开一个Bash窗口

    $ cd /f/MongoDb/bin/&&mongo
    MongoDB shell version: 2.6.6
    connecting to: test
    Welcome to the MongoDB shell.
    For interactive help, type "help".
    For more comprehensive documentation, see
        http://docs.mongodb.org/
    Questions? Try the support group
        http://groups.google.com/group/mongodb-user
    >_
    

    &&符号是同时执行多个指令;退出测试请输入 Ctrl+c

    > ^C
    bye
    

    6、 创建 Windows 服务

    $ mongod --dbpath "/f/MongoDb/data/db" --logpath "/f/MongoDb/data/log/MongDb.log" --install --serviceName MongoDb
    

    这时候进入log目录发现 MongDb.log 里面写了:

    2014-12-31T11:45:02.232+0800 Trying to install Windows service 'MongoDb'
    2014-12-31T11:45:03.077+0800 Service 'MongoDb' (MongoDB) installed with command line 'f:MongoDbinmongod.exe --dbpath f:/MongoDb/data/db --logpath f:/MongoDb/data/log/MongDb.log --service'
    2014-12-31T11:45:03.077+0800 Service can be started from the command line with 'net start MongoDb'
    

    输入指令:

    $ net start MongoDb
    MongoDb 服务正在启动 .
    MongoDb 服务已经启动成功。
    

    到此,windows Mongodb 服务启动成功;试试在浏览器中输入 localhost:27017 ,会显示什么?

    7、 关闭服务删除服务 ,指令:

    • 关闭服务
    $ net stop MongoDB
    发生系统错误 109。
    管道已结束。
    

    此时有提示: 发生系统错误 109 不要紧,只要进入 datadb 目录删除 mongodb.lok 文件重新启动服务即可(不行?多试几次)。

    • 删除服务
    $ mongod --dbpath "/f/MongoDb/data/db" --logpath "/f/MongoDb/data/log/MongDb.log" --remove --serviceName "MongoDB"
    2014-12-31T12:50:44.304+0800 log file "f:/MongoDb/data/log/MongDb.log" exists; m
    oved to "f:/MongoDb/data/log/MongDb.log.2014-12-31T04-50-44".
    

    此时进入 MongDb.log 发现文本为:

    2014-12-31T12:50:44.319+0800 Trying to remove Windows service 'MongoDB'
    2014-12-31T12:50:44.319+0800 Service 'MongoDB' removed
    

    到此,mongodb 服务删除成功。

    mongodb 常用指令

    1、 启动 mongodb ;方法不再赘述, 以 $ net start MongoDB 为例;

    $ cd /f/MongoDb/bin/&&net start MongoDb&&mongo
    
    MongoDb 服务已经启动成功。
    
    MongoDB shell version: 2.6.6
    connecting to: test
    > show dbs
    admin  (empty)
    local  0.078GB
    >_
    

    2、 增删改查 ,以及常见指令

    > db.highsea.save({"_id":"2","nickname":"high sea","job":"web前端开发工程师"})
    WriteResult({ "nInserted" : 1 })
    >_
    

    注 此处如提示

     chunk 4114 failed with errno:1455 页面文件太小,无法完成操作。
    ……
    

    则是服务器内存不够用了,建议增加虚拟内存或者物理内存

    注 mongodb 中把关系数据库的"表"称作"集合" ……

    以上创建了 名为”highsea“的表,(如果已存在 “highsea”的表 mongodb 会合并)并且插入了俩个字段 "nickname" 和 "job" ,主键是 “_id”,继续:

    > db.highsea.insert({"_id":"1","nickname":"Gao Hai","QQ":"644494365"})
    WriteResult({ "nInserted" : 1 })
    > db.highsea.insert({"_id":"3","email":"admin@highsea90.com"})
    WriteResult({ "nInserted" : 1 })
    > db.highsea.insert({"_id":"3","email":"644494365@qq.com"})
    WriteResult({
            "nInserted" : 0,
            "writeError" : {
                    "code" : 11000,
                    "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicat
    e key error index: highsea.highsea.$_id_  dup key: { : "3" }"
            }
    })
    

    以上,我又插入一条 主键 "_id" 为 "1" 的数据,然后又重复插入了 "_id"为"2" 的数据,mongodb 报错,那换成 save 继续:

    > db.highsea.save({"_id":"3","email":"644494365@qq.com"})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    

    mongodb 提示 Modified 成功。(这也是 save 和 insert 的区别)
    此时

    > db.highsea.find()
    { "_id" : "1", "nickname" : "Gao Hai", "QQ" : "644494365" }
    { "_id" : "2", "nickname" : "high sea", "job" : "web前端开发工程师" }
    { "_id" : "3", "email" : "644494365@qq.com" }
    
    > db.highsea.find({"QQ":"644494365"})
    { "_id" : "1", "nickname" : "Gao Hai", "QQ" : "644494365" }
    
    > show dbs
    admin    (empty)
    highsea  0.078GB
    local    0.078GB
    test     0.078GB
    
    > db.version()
    2.6.6
    
    > db.getMongo()
    connection to 127.0.0.1
    
    > db.addUser("hs","mg123","true")
    WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' inste
    ad
    Successfully added user: { "user" : "hs", "roles" : [ "read" ] }
    
    > show users
    {
            "_id" : "highsea.hs",
            "user" : "hs",
            "db" : "highsea",
            "roles" : [
                    {
                            "role" : "read",
                            "db" : "highsea"
                    }
            ]
    }
    
    > show collections
    highsea
    system.indexes
    
    > db.createCollection("wellcome")
    { "ok" : 1 }
    
    > use highsea
    switched to db highsea
    
    > db.dropDatabase()
    { "dropped" : "highsea", "ok" : 1 }
    
    > show dbs
    admin     0.078GB
    local     0.078GB
    test      0.078GB
    wellcome  (empty)
    
    >_
    

    这里有个提示: 2.6.6 版本已经不推荐使用 addUser 了,请使用 createUser

    • 注:输入中文时注意光标

    以上展示了 指令 :

    show dbs                    显示所有数据库
    db.foo.save({})             创建|更新某个数据库
    db.foo.insert({})           插入某个数据库
    db.foo.find()               显示某个数据库
    db.foo.find({"foo":"foo"})  对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫foo,且foo的值为foo
    db.version()                查看当前版本
    db.getMongo()               获取链接当前数据库的服务器
    db.addUser()                增加数据库用户
    show users                  查看用户
    show collections            显示当前数据库的集合
    db.createCollection("foo")  创建一个名为"foo"的空数据库
    use foo                     切换到某个数据库
    db.dropDatabase()           删除当前数据库
    

    其他指令 可以使用 help | db.help() | db.yourColl.help() | db.youColl.find().help()

    附: Mongodb 数据库操作 help 指令 中文版

    • help
        db.help()                    help on db methods
        db.mycoll.help()             help on collection methods
        sh.help()                    sharding helpers
        rs.help()                    replica set helpers
        help admin                   administrative help
        help connect                 connecting to a db help
        help keys                    key shortcuts
        help misc                    misc things to know
        help mr                      mapreduce
        show dbs                     show database names
        show collections             show collections in current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries with time >= 1ms
        show logs                    show the accessible logger names
        show log [name]              prints out the last segment of log in memory, 'global' is default
        use <db_name>                set current database
        db.foo.find()                list objects in collection foo
        db.foo.find( { a : 1 } )     list objects in foo where a == 1
        it                           result of the last line evaluated; use to further iterate
        DBQuery.shellBatchSize = x   set default number of items to display on shell
        exit                         quit the mongo shell
    

    db.help();

    DB methods:
        db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ]
        db.auth(username, password)
        db.cloneDatabase(fromhost)
        db.commandHelp(name) returns the help for the command
        db.copyDatabase(fromdb, todb, fromhost)
        db.createCollection(name, { size : ..., capped : ..., max : ... } )
        db.createUser(userDocument)
        db.currentOp() displays currently executing operations in the db
        db.dropDatabase()
        db.eval(func, args) run code server-side
        db.fsyncLock() flush data to disk and lock server for backups
        db.fsyncUnlock() unlocks server following a db.fsyncLock()
        db.getCollection(cname) same as db['cname'] or db.cname
        db.getCollectionNames()
        db.getLastError() - just returns the err msg string
        db.getLastErrorObj() - return full status object
        db.getMongo() get the server connection object
        db.getMongo().setSlaveOk() allow queries on a replication slave server
        db.getName()
        db.getPrevError()
        db.getProfilingLevel() - deprecated
        db.getProfilingStatus() - returns if profiling is on and slow threshold
        db.getReplicationInfo()
        db.getSiblingDB(name) get the db at the same server as this one
        db.getWriteConcern() - returns the write concern used for any operations on this db, inherited from server object if set
        db.hostInfo() get details about the server's host
        db.isMaster() check replica primary status
        db.killOp(opid) kills the current operation in the db
        db.listCommands() lists all the db commands
        db.loadServerScripts() loads all the scripts in db.system.js
        db.logout()
        db.printCollectionStats()
        db.printReplicationInfo()
        db.printShardingStatus()
        db.printSlaveReplicationInfo()
        db.dropUser(username)
        db.repairDatabase()
        db.resetError()
        db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into { cmdObj : 1 }
        db.serverStatus()
        db.setProfilingLevel(level,<slowms>) 0=off 1=slow 2=all
        db.setWriteConcern( <write concern doc> ) - sets the write concern for writes to the db
        db.unsetWriteConcern( <write concern doc> ) - unsets the write concern for writes to the db
        db.setVerboseShell(flag) display extra information in shell output
        db.shutdownServer()
        db.stats()
        db.version() current version of the server
    
    • db.yourColl.help();
    DBCollection help
        db.yourColl.find().help() - show DBCursor help
        db.yourColl.count()
        db.yourColl.copyTo(newColl) - duplicates collection by copying all documents to newColl; no indexes are copied.
        db.yourColl.convertToCapped(maxBytes) - calls {convertToCapped:'yourColl', size:maxBytes}} command
        db.yourColl.dataSize()
        db.yourColl.distinct( key ) - e.g. db.yourColl.distinct( 'x' )
        db.yourColl.drop() drop the collection
        db.yourColl.dropIndex(index) - e.g. db.yourColl.dropIndex( "indexName" ) or db.yourColl.dropIndex( { "indexKey" : 1 } )
        db.yourColl.dropIndexes()
        db.yourColl.ensureIndex(keypattern[,options]) - options is an object with these possible fields: name, unique, dropDups
        db.yourColl.reIndex()
        db.yourColl.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return. - e.g. db.yourColl.find( {x:77} , {name:1, x:1} )
        db.yourColl.find(...).count()
        db.yourColl.find(...).limit(n)
        db.yourColl.find(...).skip(n)
        db.yourColl.find(...).sort(...)
        db.yourColl.findOne([query])
        db.yourColl.findAndModify( { update : ... , remove : bool [, query: {}, sort: {}, 'new': false] } )
        db.yourColl.getDB() get DB object associated with collection
        db.yourColl.getPlanCache() get query plan cache associated with collection
        db.yourColl.getIndexes()
        db.yourColl.group( { key : ..., initial: ..., reduce : ...[, cond: ...]} )
        db.yourColl.insert(obj)
        db.yourColl.mapReduce( mapFunction , reduceFunction , <optional params>)
        db.yourColl.aggregate( [pipeline], <optional params> ) - performs an aggregation on a collection; returns a cursor
        db.yourColl.remove(query)
        db.yourColl.renameCollection( newName , <dropTarget> ) renames the collection.
        db.yourColl.runCommand( name , <options> ) runs a db command with the given name where the first param is the collection name
        db.yourColl.save(obj)
        db.yourColl.stats()
        db.yourColl.storageSize() - includes free space allocated to this collection
        db.yourColl.totalIndexSize() - size in bytes of all the indexes
        db.yourColl.totalSize() - storage allocated for all data and indexes
        db.yourColl.update(query, object[, upsert_bool, multi_bool]) - instead of two flags, you can pass an object with fields: upsert, multi
        db.yourColl.validate( <full> ) - SLOW
        db.yourColl.getShardVersion() - only for use with sharding
        db.yourColl.getShardDistribution() - prints statistics about data distribution in the cluster
        db.yourColl.getSplitKeysForChunks( <maxChunkSize> ) - calculates split points over all chunks and returns splitter function
        db.yourColl.getWriteConcern() - returns the write concern used for any operations on this collection, inherited from server/db if set
        db.yourColl.setWriteConcern( <write concern doc> ) - sets the write concern for writes to the collection
        db.yourColl.unsetWriteConcern( <write concern doc> ) - unsets the writeconcern for writes to the collection
    
    • db.youColl.find().help();
    find() modifiers
        .sort( {...} )
        .limit( n )
        .skip( n )
        .count(applySkipLimit) - total # of objects matching query. by default ignores skip,limit
        .size() - total # of objects cursor would return, honors skip,limit
        .explain([verbose])
        .hint(...)
        .addOption(n) - adds op_query options -- see wire protocol
        ._addSpecial(name, value) - http://dochub.mongodb.org/core/advancedqueries#AdvancedQueries-Metaqueryoperators
        .batchSize(n) - sets the number of docs to return per getMore
        .showDiskLoc() - adds a $diskLoc field to each returned object
        .min(idxDoc)
        .max(idxDoc)
        .comment(comment)
        .snapshot()
        .readPref(mode, tagset)
        
    Cursor methods
        .toArray() - iterates through docs and returns an array of the results
        .forEach( func )
        .map( func )
        .hasNext()
        .next()
        .objsLeftInBatch() - returns count of docs left in current batch (when exhausted, a new getMore will be issued)
        .itcount() - iterates through documents and counts them
        .pretty() - pretty print each document, possibly over multiple lines
    

    附:Mongodb help 指令 中文版

    Options:
    
    General options:
      -h [ --help ]               show this usage information
      --version                   show version information
      -f [ --config ] arg         configuration file specifying additional options
      -v [ --verbose ] [=arg(=v)] be more verbose (include multiple times for more
                                  verbosity e.g. -vvvvv)
      --quiet                     quieter output
      --port arg                  specify port number - 27017 by default
      --bind_ip arg               comma separated list of ip addresses to listen on
                                  - all local ips by default
      --maxConns arg              max number of simultaneous connections - 1000000
                                  by default
      --logpath arg               log file to send write to instead of stdout - has
                                  to be a file, not directory
      --logappend                 append to logpath instead of over-writing
      --timeStampFormat arg       Desired format for timestamps in log messages.
                                  One of ctime, iso8601-utc or iso8601-local
      --pidfilepath arg           full path to pidfile (if not set, no pidfile is
                                  created)
      --keyFile arg               private key for cluster authentication
      --setParameter arg          Set a configurable parameter
      --httpinterface             enable http interface
      --clusterAuthMode arg       Authentication mode used for cluster
                                  authentication. Alternatives are
                                  (keyFile|sendKeyFile|sendX509|x509)
      --auth                      run with security
      --noauth                    run without security
      --ipv6                      enable IPv6 support (disabled by default)
      --jsonp                     allow JSONP access via http (has security
                                  implications)
      --rest                      turn on simple rest api
      --slowms arg (=100)         value of slow for profile and console log
      --profile arg               0=off 1=slow, 2=all
      --cpu                       periodically show cpu and iowait utilization
      --sysinfo                   print some diagnostic system information
      --dbpath arg                directory for datafiles - defaults to datadb
      --directoryperdb            each database will be stored in a separate
                                  directory
      --noIndexBuildRetry         don't retry any index builds that were
                                  interrupted by shutdown
      --noprealloc                disable data file preallocation - will often hurt
                                  performance
      --nssize arg (=16)          .ns file size (in MB) for new databases
      --quota                     limits each database to a certain number of files
                                  (8 default)
      --quotaFiles arg            number of files allowed per db, implies --quota
      --smallfiles                use a smaller default file size
      --syncdelay arg (=60)       seconds between disk syncs (0=never, but not
                                  recommended)
      --upgrade                   upgrade db if needed
      --repair                    run repair on all dbs
      --repairpath arg            root directory for repair files - defaults to
                                  dbpath
      --noscripting               disable scripting engine
      --notablescan               do not allow table scans
      --journal                   enable journaling
      --nojournal                 disable journaling (journaling is on by default
                                  for 64 bit)
      --journalOptions arg        journal diagnostic options
      --journalCommitInterval arg how often to group/batch commit (ms)
    
    Windows Service Control Manager options:
      --install                install Windows service
      --remove                 remove Windows service
      --reinstall              reinstall Windows service (equivalent to --remove
                               followed by --install)
      --serviceName arg        Windows service name
      --serviceDisplayName arg Windows service display name
      --serviceDescription arg Windows service description
      --serviceUser arg        account for service execution
      --servicePassword arg    password used to authenticate serviceUser
    
    Replication options:
      --oplogSize arg       size to use (in MB) for replication op log. default is
                            5% of disk space (i.e. large is good)
    
    Master/slave options (old; use replica sets instead):
      --master              master mode
      --slave               slave mode
      --source arg          when slave: specify master as <server:port>
      --only arg            when slave: specify a single database to replicate
      --slavedelay arg      specify delay (in seconds) to be used when applying
                            master ops to slave
      --autoresync          automatically resync if slave data is stale
    
    Replica set options:
      --replSet arg           arg is <setname>[/<optionalseedhostlist>]
      --replIndexPrefetch arg specify index prefetching behavior (if secondary)
                              [none|_id_only|all]
    
    Sharding options:
      --configsvr           declare this is a config db of a cluster; default port
                            27019; default dir /data/configdb
      --shardsvr            declare this is a shard db of a cluster; default port
                            27018
    
  • 相关阅读:
    Java主流日志工具库
    JSON 与 String、Map、JavaBean互转
    Session超时处理
    spring cron表达式(定时器)
    Windows服务器下用IIS Rewrite组件为IIS设置伪静态方法
    JAVA导出Excel(支持多sheet)
    自己实现一个简单的线程池
    数据库
    计算机网络
    HashMap源码分析
  • 原文地址:https://www.cnblogs.com/highsea90/p/4195927.html
Copyright © 2011-2022 走看看