Mongo入门之环境搭建

来源:互联网 发布:数控机床加工编程 编辑:程序博客网 时间:2024/06/05 18:30

操作系统:WindowsXp

MongoDB:mongodb-win32-i386-2.0.2.zip


1:解压MongoDB至F:\software\MongoDB\mongodb-win32-i386-2.0.2 简称为MongoDB_HOME

2:在F盘下建立目录 /data/db

3:CommandLine进入MongoDB_HOME/bin目录,执行mongod.exe,启动服务(默认数据库文件夹为F:/data/db)

4:另开CommandLine,进入MongoDB_HOME/bin,执行mongo.exe

二、DB shell数据操作

Ø 数据库

> 2+4
6
> db
test
> db.foo.insert({id:2011, userName:'shihuacai'});//插入数据
> db.foo.find();//查询数据
{ "_id" : ObjectId("50f7acbe98e1961c189094dd"), "id" : 2011, "userName" : "shihuacai" }
> help  //Help查看命令提示        db.help()                    help on db methods        db.mycoll.help()             help on collection methods        rs.help()                    help on replica set methods        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
2、切换/创建数据库
>use yourDB;
当创建一个集合(table)的时候会自动创建当前数据库
 
3、查询所有数据库
show dbs;
 
4、删除当前使用数据库
db.dropDatabase();
 
5、从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”);
将指定机器上的数据库的数据克隆到当前数据库

6、从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("test", "copytest", "127.0.0.1");
将本机的test的数据复制到copytest数据库中
7、修复当前数据库
db.repairDatabase();
 
8、查看当前使用的数据库
db.getName();
db;
db和getName方法是一样的效果,都可以查询当前使用的数据库
 
9、显示当前db状态
db.stats();
 
10、当前db版本
db.version();
 
11、查看当前db的链接机器地址
db.getMongo();

connection to 127.0.0.1


Ø Collection聚集集合

 
1、创建一个聚集集合(table
>db.createCollection("testCollection", {size: 20, capped: 5, max:  100});
>{ "ok" : 1 } 
2、得到指定名称的聚集集合(table
>db.getCollection("testCollection");
>copytest.testCollection
3、得到当前db的所有聚集集合
>db.getCollectionNames();
>[ "foo", "system.indexes", "testCollection" ]
4、显示当前db所有聚集索引的状态
db.printCollectionStats();
foo{        "ns" : "copytest.foo",        "count" : 7,        "size" : 456,        "avgObjSize" : 65.14285714285714,        "storageSize" : 8192,        "numExtents" : 1,        "nindexes" : 1,        "lastExtentSize" : 8192,        "paddingFactor" : 1,        "flags" : 1,        "totalIndexSize" : 8176,        "indexSizes" : {                "_id_" : 8176        },        "ok" : 1}---system.indexes{        "ns" : "copytest.system.indexes",        "count" : 1,        "size" : 68,        "avgObjSize" : 68,        "storageSize" : 4096,        "numExtents" : 1,        "nindexes" : 0,        "lastExtentSize" : 4096,        "paddingFactor" : 1,        "flags" : 0,        "totalIndexSize" : 0,        "indexSizes" : {        },        "ok" : 1}---testCollection{        "ns" : "copytest.testCollection",        "count" : 0,        "size" : 0,        "storageSize" : 4096,        "numExtents" : 1,        "nindexes" : 0,        "lastExtentSize" : 4096,        "paddingFactor" : 1,        "flags" : 0,        "totalIndexSize" : 0,        "indexSizes" : {        },        "capped" : 1,        "max" : 100,        "ok" : 1}---

Ø 用户相关

1、添加一个用户
db.addUser("name");
db.addUser("userName", "pwd123", true);
添加用户、设置密码、是否只读
 
2、数据库认证、安全模式
db.auth("userName", "123123");
 
3、显示当前所有用户
show users;
 
4、删除用户
db.removeUser("userName");

Ø 其他

1、查询之前的错误信息
db.getPrevError();
 
2、清除错误记录
db.resetError();

 

三、Collection聚集集合操作

Ø 查看聚集集合基本信息

 
1、查看帮助
>db.mycoll.help()
>DBCollection help        db.mycoll.find().help() - show DBCursor help        db.mycoll.count()        db.mycoll.dataSize()        db.mycoll.distinct( key ) - eg. db.mycoll.distinct( 'x' )        db.mycoll.drop() drop the collection        db.mycoll.dropIndex(name)        db.mycoll.dropIndexes()        db.mycoll.ensureIndex(keypattern[,options]) - options is an object withthese possible fields: name, unique, dropDups        db.mycoll.reIndex()        db.mycoll.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.                                                      e.g. db.mycoll.find( {x:77} , {name:1, x:1} )        db.mycoll.find(...).count()        db.mycoll.find(...).limit(n)        db.mycoll.find(...).skip(n)        db.mycoll.find(...).sort(...)        db.mycoll.findOne([query])        db.mycoll.findAndModify( { update : ... , remove : bool [, query: {}, sort: {}, 'new': false] } )        db.mycoll.getDB() get DB object associated with collection        db.mycoll.getIndexes()        db.mycoll.group( { key : ..., initial: ..., reduce : ...[, cond: ...] })        db.mycoll.mapReduce( mapFunction , reduceFunction , <optional params> )        db.mycoll.remove(query)        db.mycoll.renameCollection( newName , <dropTarget> ) renames the collection.        db.mycoll.runCommand( name , <options> ) runs a db command with the given name where the first param is the collection name        db.mycoll.save(obj)        db.mycoll.stats()        db.mycoll.storageSize() - includes free space allocated to this collection        db.mycoll.totalIndexSize() - size in bytes of all the indexes        db.mycoll.totalSize() - storage allocated for all data and indexes        db.mycoll.update(query, object[, upsert_bool, multi_bool])        db.mycoll.validate( <full> ) - SLOW        db.mycoll.getShardVersion() - only for use with sharding        db.mycoll.getShardDistribution() - prints statistics about data distribution in the cluster
2、查询当前集合的数据条数(db.foo.insert执行的次数)
>db.foo.count();
>7 
3、查看数据空间大小
>db.foo.dataSize();
> 456
4、得到当前聚集集合所在的db
>db.foo.getDB();
>copytest
5、得到当前聚集的状态
db.foo.stats();
 
6、得到聚集集合总大小
db.foo.totalSize();
 
7、聚集集合储存空间大小
db.foo.storageSize();
 
8、Shard版本信息
db.foo.getShardVersion()
 
9、聚集集合重命名
db.foo.renameCollection("users");
将userInfo重命名为users
 
10、删除当前聚集集合
db.foo.drop();

Ø 聚集集合查询

1、查询所有记录
db.foo.find();
相当于:select * from foo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize = 50;这样每页就显示50条记录了。
 
2、查询去掉后的当前聚集集合中的某列的重复数据
db.foo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from foo;
 
3、查询age = 22的记录
db.foo.find({"age": 22});
相当于: select * from foo where age = 22;
 
4、查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age > 22;
 
5、查询age < 22的记录
db.foo.find({age: {$lt: 22}});
相当于:select * from foo where age < 22;
 
6、查询age >= 25的记录
db.foo.find({age: {$gte: 25}});
相当于:select * from foo where age >= 25;
 
7、查询age <= 25的记录
db.foo.find({age: {$lte: 25}});
 
8、查询age >= 23 并且 age <= 26
db.foo.find({age: {$gte: 23, $lte: 26}});
 
9、查询name中包含 mongo的数据
db.foo.find({name: /mongo/});
//相当于%%
select * from foo where name like ‘%mongo%’;
 
10、查询name中以mongo开头的
db.foo.find({name: /^mongo/});
select * from foo where name like ‘mongo%’;
 
11、查询指定列name、age数据
db.foo.find({}, {name: 1, age: 1});
相当于:select name, age from foo;
当然name也可以用true或false,当用true的情况下hename:1效果一样,如果用false就是排除name,显示name以外的列信息。
 
12、查询指定列name、age数据, age > 25
db.foo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from foo where age > 25;
 
13、按照年龄排序
升序:db.foo.find().sort({age: 1});
降序:db.foo.find().sort({age: -1});
 
14、查询name = zhangsan, age = 22的数据
db.foo.find({name: 'zhangsan', age: 22});
相当于:select * from foo where name = ‘zhangsan’ and age = ‘22’;
 
15、查询前5条数据
db.foo.find().limit(5);
相当于:select top 5 * from foo;
 
16、查询10条以后的数据
db.foo.find().skip(10);
相当于:select * from foo where id not in (
select top 10 * from foo
);
 
17、查询在5-10之间的数据
db.foo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
 
18、or与 查询
db.foo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from foo where age = 22 or age = 25;
 
19、查询第一条数据
db.foo.findOne();
相当于:select top 1 * from foo;
db.foo.find().limit(1);
 
20、查询某个结果集的记录条数
db.foo.find({age: {$gte: 25}}).count();
相当于:select count(*) from foo where age >= 20;
 
21、按照某列进行排序
db.foo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from foo;

Ø 索引

1、创建索引
db.foo.ensureIndex({name: 1});
db.foo.ensureIndex({name: 1, ts: -1});
 
2、查询当前聚集集合所有索引
db.foo.getIndexes();
 
3、查看总索引记录大小
db.foo.totalIndexSize();
 
4、读取当前集合的所有index信息
db.foo.reIndex();
 
5、删除指定索引
db.foo.dropIndex("name_1");
 
6、删除所有索引索引
db.foo.dropIndexes();

Ø 修改、添加、删除集合数据

1、添加
db.foo.save({name: ‘zhangsan’, age: 25, sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准
 
2、修改
db.foo.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update foo set name = ‘changeName’ where age = 25;
 
db.foo.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi’;
 
db.foo.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update foo set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;
 
3、删除
db.foo.remove({age: 132});
 
4、查询修改删除
db.foo.findAndModify({
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});
 
db.runCommand({ findandmodify : "users", 
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});

update 或 remove 其中一个是必须的参数; 其他参数可选。

参数

详解

默认值

query

查询过滤条件

{}

sort

如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作

{}

remove

若为true,被选中对象将在返回前被删除

N/A

update

一个 修改器对象

N/A

new

若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。

false

fields

参见Retrieving a Subset of Fields (1.5.0+)

All fields

upsert

创建新对象若查询结果为空。 示例 (1.5.4+)

false

Ø 语句块操作

1、简单Hello World
print("Hello World!");
这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
 
2、将一个对象转换成json
tojson(new Object());
tojson(new Object('a'));
 
3、循环添加数据
> for (var i = 0; i < 30; i++) {
... db.foo.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };
这样就循环添加了30条数据,同样也可以省略括号的写法
> for (var i = 0; i < 30; i++) db.foo.save({name: "u_" + i, age: 22 + i, sex: i % 2});
也是可以的,当你用db.foo.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
 
4、find 游标查询
>var cursor = db.foo.find();
> while (cursor.hasNext()) { 
    printjson(cursor.next()); 
}
这样就查询所有的users信息,同样可以这样写
var cursor = db.foo.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同样可以省略{}号
 
5、forEach迭代循环
db.foo.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
 
6、将find游标当数组处理
var cursor = db.foo.find();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
 
7、将find游标转换成数组
> var arr = db.foo.find().toArray();
> printjson(arr[2]);
用toArray方法将其转换为数组
 
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
db.foo.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
db.foo.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
排除age的列
db.foo.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
 
9、forEach传递函数显示信息
db.foo.find({x:4}).forEach(function(x) {print(tojson(x));});
上面介绍过forEach需要传递一个函数,函数会接受一个参数,就是当前循环的对象,然后在函数体重处理传入的参数信息。

原创粉丝点击