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需要传递一个函数,函数会接受一个参数,就是当前循环的对象,然后在函数体重处理传入的参数信息。
- Mongo入门之环境搭建
- 【Mongo】 环境搭建部署
- Android入门之环境搭建
- Android入门之环境搭建
- PHP入门之环境搭建
- Android入门之环境搭建
- Spring入门之环境搭建:
- CUDA入门之环境搭建
- Hive 之 入门环境搭建
- Activiti入门之环境搭建
- apache-php-mongo开发环境的搭建
- LAMP环境搭建(M=Mongo)
- mysql与mongo数据库---环境搭建
- spark+mongo Scala开发环境搭建
- Qt for Symbian 入门之环境搭建
- lua学习之入门:环境搭建
- Python + Selenium 入门之环境搭建
- Spring MVC实例入门之环境搭建
- JAVA中Pattern和Matcher的用法 正则表达式相关
- Android 如何建立AIDL
- 直升机
- 附件上传、下载
- jetty请求form表单太大解决
- Mongo入门之环境搭建
- 如何处理ios的颜色,背景颜色,图片颜色,字体颜色等,参看下面的文章,等有时间我好好总结一下
- web.config connectionStrings 数据库连接字符串的解释(转载)
- 如何设置mysql远程访问
- AS简单用法
- 编程之美_010快速寻找满足条件的两个数
- Intellij IDEA 12 解决 Google Map Android API V2 的问题
- 二维码打印JS
- android4.0鼠标右键返回功能