mongod--dbpath"c:\data"--logpath"c:\data\logs.t" />

MongoDB常用的操作命令

安装:

官方网站https://www.360docs.net/doc/5a5658831.html,/downloads

mkdir c:\data\db
xcopy d:\mongodb-win32-1.8.1 c:\
c:\mongodb-win32-1.8.1\bin>mongod --dbpath "c:\data\db"
c:\mongodb-win32-1.8.1\bin>mongod --dbpath "c:\data" --logpath "c:\data\logs.txt" --install --serviceName "MongoDB"
net start "MongoDB"
start http://localhost:28017

#卸载mongodb service
mongod --remove --serviceName "MongoDB"

进入mongodb:
保持mongod命令窗口运行状态,cmd → c:\mongodb-win32-1.8.1\bin>mongo


--------------------------------------------------------------------
MongoDB命令管理
--------------------------------------------------------------------

shell操作数据库


一、超级用户相关:

1. #进入数据库admin

use admin

2. #增加或修改用户密码

db.addUser('name','pwd')

3. #查看用户列表

https://www.360docs.net/doc/5a5658831.html,ers.find()

4. #用户认证

db.auth('name','pwd')

5. #删除用户

db.removeUser('name')

6. #查看所有用户

show users

7. #查看所有数据库

show dbs

8. #查看所有的collection

show collections

9. #查看各collection的状态

db.printCollectionStats()

10. #查看主从复制状态

db.printReplicationInfo()

11. #修复数据库

db.repairDatabase()

12. #设置记录profiling,0=off 1=slow 2=all

db.setProfilingLevel(1)

13. #查看profiling

show profile

14. #拷贝数据库

db.copyDatabase('mail_addr','mail_addr_tmp')

15. #删除collection

db.mail_addr.drop()

16. #删除当前的数据库

db.dropDatabase()



二、增删改

1. #存储嵌套的对象

db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})

2. #存储数组对象

https://www.360docs.net/doc/5a5658831.html,er_addr.save({'Uid':'yushunzhi@https://www.360docs.net/doc/5a5658831.html,','Al':['test-1@https://www.360docs.net/doc/5a5658831.html,','test-2@https://www.360docs.net/doc/5a5658831.html,']})

3. #根据query条件修改,如果不存在则插入,允许修改多条记录

db.foo.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)

4. #删除yy=5的记录

db.foo.remove({'yy':5})

5. #删除所有的记录

db.foo.remove()



三、索引

1. #增加索引:1(ascending),-1(descending)

db.foo.ensureIndex({firstname: 1, lastname: 1}, {unique: true});

2. #索引子对象

https://www.360docs.net/doc/5a5658831.html,er_addr.ensureIndex({'Al.Em': 1})

3. #查看索引信息

db.foo.getIndexes()

db.foo.getIndexKeys()

4. #根据索引名删除索引

https://www.360docs.net/doc/5a5658831.html,er_addr.dropIndex('Al.Em_1')



四、查询

1. #查找所有

db.foo.find()

2. #查找一条记录

db.foo.findOne()

3. #根据条件检索10条记录

db.foo.find({'msg':'Hello 1'}).limit(10)

4. #sort排序

db.deliver_status.find({'From':'ixigua@https://www.360docs.net/doc/5a5658831.html,'}).sort({'Dt',-1})
db.deliver_status.find().sort({'Ct':-1}).limit(1)

5. #count操作

https://www.360docs.net/doc/5a5658831.html,er_addr.count()

6. #distinct操作,查询指定列,去重复

db.foo.distinct('msg')

7. #

”>=”操作

db.foo.find({"timestamp": {"$gte" : 2}})

8. #子对象的查找

db.foo.find({'address.city':'beijing'})



五、管理

1. #查看collection数据的大小

db.deliver_status.dataSize()

2. #查看colleciont状态

db.deliver_status.stats()

3. #查询所有索引的大小

db.deliver_status.totalIndexSize()



六、advanced queries:高级查询

条件操作符
$gt : >
$lt : <
$gte: >=
$lte: <=
$ne : !=、<>
$in : in
$nin: not in
$all: all
$not: 反匹配(1.3.3及以上版本)

查询 name <> "bruce" and age >= 18 的数据
https://www.360docs.net/doc/5a5658831.html,ers.find({name: {$ne: "bruce"}, age: {$gte: 18}});

查询 creation_date > '2010-01-01' and creation_date <= '2010-12-31' 的数据
https://www.360docs.net/doc/5a5658831.html,ers.find({creation_date:{$gt:new Date(2010,0,1), $lte:new Date(2010,11,31)});

查询 age in (20,22,24,26) 的数据
https://www.360docs.net/doc/5a5658831.html,ers.find({age: {$in: [20,22,24,26]}});

查询 age取模10等于0 的数据
https://www.360docs.net/doc/5a5658831.html,ers.find('this.age % 10 == 0');
或者
https://www.360docs.net/doc/5a5658831.html,ers.find({age : {$mod : [10, 0]}});

匹配所有
https://www.360docs.net/doc/5a5658831.html,ers.find({favorite_number : {$all : [6, 8]}});
可以查询出{name: 'David', age: 26, favorite_number: [ 6, 8, 9 ] }
可以不查询出{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }

查询不匹配name=B*带头的记录
https://www.360docs.net/doc/5a5658831.html,ers.find({name: {$not: /^B.*/}});
查询 age取模10不等于0 的数据
https://www.360docs.net/doc/5a5658831.html,ers.find({age : {$not: {$mod : [10, 0]}}});

#返回部分字段
选择返回age和_id字段(_id字段总是会被返回)
https://www.360docs.net/doc/5a5658831.html,ers.find({}, {age:1});
https://www.360docs.net/doc/5a5658831.html,ers.find({}, {age:3});
https://www.360docs.net/doc/5a5658831.html,ers.find({}, {age:true});
https://www.360docs.net/doc/5a5658831.html,ers.find({ name : "bruce" }, {age:1});
0为false, 非0为true

选择返回age、address和_id字段
https://www.360docs.net/doc/5a5658831.html,ers.find({ name : "bruce" }, {age:1, address:1});

排除返回age、address和_id字段
https://www.360docs.net/doc/5a5658831.html,ers.find({}, {age:0, address:false});
https://www.360docs.net/doc/5a5658831.html,ers.find({ name : "bruce" }, {age:0, address:false});

数组元素个数判断
对于{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }记录
匹配https://www.360docs.net/doc/5a5658831.html,ers.find({favorite_number: {$size: 3}});
不匹配https://www.360docs.net/doc/5a5658831.html,ers.find({favorite_number: {$size: 2}});

$exists判断字段是否存在
查询所有存在name字段的记录
https://www.360docs.net/doc/5a5658831.html,ers.find({name: {$exists: true}});
查询所有不存在phone字段的记录
https://www.360docs.net/doc/5a5658831.html,ers.find({phone: {$exists: false}});

$type判断字段类型
查询所有name字段是字符类型的
https://www.360docs.net/doc/5a5658831.html,ers.find({name: {$type: 2}});
查询所有age字段是整型的
https://www.360docs.net/doc/5a5658831.html,ers.find({age: {$type: 16}});

对于字符字段,可以使用正则表达式
查询以字母b或者B带头的所有记录
https://www.360docs.net/doc/5a5658831.html,ers.find({name: /^b.*/i});

$elemMatch(1.3.1及以上版本)
为数组的字段中匹配其中某个元素

Javascript查询和$where查询
查询 age > 18 的记录,以下查询都一样
https://www.360docs.net/doc/5a5658831.html,ers.find({age: {$gt: 18}});
https://www.360docs.net/doc/5a5658831.html,ers.find({$where: "this.age > 18"});
https://www.360docs.net/doc/5a5658831.html,ers.find("this.age > 18");
f = function() {return this.age

> 18} https://www.360docs.net/doc/5a5658831.html,ers.find(f);

排序sort()
以年龄升序asc
https://www.360docs.net/doc/5a5658831.html,ers.find().sort({age: 1});
以年龄降序desc
https://www.360docs.net/doc/5a5658831.html,ers.find().sort({age: -1});

限制返回记录数量limit()
返回5条记录
https://www.360docs.net/doc/5a5658831.html,ers.find().limit(5);
返回3条记录并打印信息
https://www.360docs.net/doc/5a5658831.html,ers.find().limit(3).forEach(function(user) {print('my age is ' + user.age)});
结果
my age is 18
my age is 19
my age is 20

限制返回记录的开始点skip()
从第3条记录开始,返回5条记录(limit 3, 5)
https://www.360docs.net/doc/5a5658831.html,ers.find().skip(3).limit(5);

查询记录条数count()
https://www.360docs.net/doc/5a5658831.html,ers.find().count();
https://www.360docs.net/doc/5a5658831.html,ers.find({age:18}).count();
以下返回的不是5,而是user表中所有的记录数量
https://www.360docs.net/doc/5a5658831.html,ers.find().skip(10).limit(5).count();
如果要返回限制之后的记录数量,要使用count(true)或者count(非0)
https://www.360docs.net/doc/5a5658831.html,ers.find().skip(10).limit(5).count(true);

分组group()
假设test表只有以下一条数据
{ domain: "https://www.360docs.net/doc/5a5658831.html,"
, invoked_at: {d:"2009-11-03", t:"17:14:05"}
, response_time: 0.05
, http_action: "GET /display/DOCS/Aggregation"
}
使用group统计test表11月份的数据count:count(*)、total_time:sum(response_time)、avg_time:total_time/count;
db.test.group(
{ cond: {"invoked_at.d": {$gt: "2009-11", $lt: "2009-12"}}
, key: {http_action: true}
, initial: {count: 0, total_time:0}
, reduce: function(doc, out){ out.count++; out.total_time+=doc.response_time }
, finalize: function(out){ out.avg_time = out.total_time / out.count }
} );

[
{
"http_action" : "GET /display/DOCS/Aggregation",
"count" : 1,
"total_time" : 0.05,
"avg_time" : 0.05
}
]



Java 应用示例

要使用Java操作MongoDB的话,要到官方网站下载一个驱动包,把包导入后,可以尝试来操作了(记得一定要开着服务器)

首先介绍一下比较常用的几个类

Mongo:连接服务器,执行一些数据库操作的选项,如新建立一个数据库等

DB:对应一个数据库,可以用来建立集合等操作

DBCollection:对应一个集合(类似表),可能是我们用得最多的,可以添加删除记录等

DBObjec:接口和BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,因为是key-value的数据结构,所以用起来其实和HashMap是基本一致的

DBCursor:用来遍历取得的数据,实现了Iterable和Iterator

接下来实际的操作一下,代码如下:

import https://www.360docs.net/doc/5a5658831.html,.UnknownHostException;

import java.util.List;

import java.util.Set;

import com.mongodb.BasicDBObject;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.DBCursor;

import com.mongodb.DBObject;

import com.mongodb.Mongo;

import com.mongodb.MongoException;

public class MongoDbTest {

public static void main(String[] args) throws UnknownHostException, MongoException {

//Mongo m = new Mongo();

//Mongo m = new Mongo("local

host");

//获得数据库服务

Mongo m = new Mongo("localhost", 27017);

//得到数据库mytest

DB db = m.getDB("mytest");

//得到mytest数据库下所有表名

Set colls = db.getCollectionNames();

for (String s : colls) {

System.out.println(s);

}

//得到testCollection表

DBCollection coll = db.getCollection("testCollection");

//new 一个BasicDBObject对象doc

BasicDBObject doc = new BasicDBObject();

//赋值

doc.put("name", "MongoDB");

doc.put("type", "database");

doc.put("count", 1);

//又new 一个BasicDBObject对象info

BasicDBObject info = new BasicDBObject();

info.put("x", 203);

info.put("y", 102);

//把info放入doc

doc.put("info", info);

//向testCollection表中插入一条数据

coll.insert(doc);

//查询一条数据

DBObject myDoc = coll.findOne();

System.out.println(myDoc);



//循环插入100条数据到testCollection

for (int i=0; i < 100; i++) {

coll.insert(new BasicDBObject().append("i", i));

}


//Counting Documents in A Collection

System.out.println(coll.getCount());


//Using a Cursor to Get All the Documents

DBCursor cur = coll.find();

while(cur.hasNext()) {

-----------------------------------------------------
DB methods:
db.addUser(username, password[, readOnly=false])
db.auth(username, password)
db.cloneDatabase(fromhost)
https://www.360docs.net/doc/5a5658831.html,mandHelp(name) returns the help for the command
db.copyDatabase(fromdb, todb, fromhost)
db.createCollection(name, { size : ..., capped : ..., max : ... } )
db.currentOp() displays the current operation in the db
db.dropDatabase()
db.eval(func, args) run code server-side
db.getCollection(cname) same as db['cname'] or https://www.360docs.net/doc/5a5658831.html,ame
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 this connection to read from the nonmaster member of a replica pair
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.isMaster() check replica primary status
db.killOp(opid) kills the current operation in the db
db.listCommands() lists all the db commands
db.logout()
db.printCollectionStats()
db.printReplicationInfo()
db.printSlaveReplicationInfo()
db.printShardingStatus()
db.removeUser(username)
db.repairDatabase()
db.resetError()
db.runCommand(cmdObj) run a database command. if cmd

Obj is a string, turns it into { cmdObj : 1 }
db.serverStatus()
db.setProfilingLevel(level,) 0=off 1=slow 2=all
db.shutdownServer()
db.stats()
db.version() current version of the server
db.getMongo().setSlaveOk() allow queries on a replication slave server
db.fsyncLock() flush data to disk and lock server for backups
db.fsyncUnock() unlocks server following a db.fsyncLock()
>





























相关文档
最新文档