个人技能总结4--MongoDB在windows上安装以及java中的增删改查
1.windows下的安装创建
http://tech.it168.com/a2011/0603/1200/000001200064_2.shtml
http://blog.csdn.net/xiaoxing598/article/details/54233044
2.Java操作mongodb
http://www.cnblogs.com/zhwl/p/3491213.html
http://blog.csdn.net/xiaoyw71/article/details/49633831
http://blog.csdn.net/mcpang/article/details/8730849
一.定义,用法:
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
MongoDB安装简单。
二.安装创建:
先下载:http://www.mongodb.org/downloads
下载后安装,此处我的安装路径是默认路劲:C:\Program Files\MongoDB
打开bin目录:C:\Program Files\MongoDB\Server\3.4\bin
接下来我们创建一个存放数据的位置:自定义,我的是D:\mymongodb\data
然后以管理员身份运行命令行:
①运行命令:mongod --dbpath “D:\mymongodb\data”
②运行命令:mongod --dbpath “D:\mymongodb\data” --logpath “D:\mymongodb\logs.txt” --install --serviceName “MongoDB”
接着:cmd打开services.msc命令,查看服务
mongod --remove --serviceName "MongoDB"
说明已安装成功,右击启动该服务。
三.Java中操作MongoDB
a) 首先下载jMongoDB的Java驱动
- http://central.maven.org/maven2/org/mongodb/
- 选择同一个版本
- 点击http://api.mongodb.org/java/current/index.html 了解更多java驱动的API信息
- 下载一下三个文件
mongo-Java-driver-2.11.4.jar
mongo-java-driver-2.11.4-javadoc.jar
mongo-java-driver-2.11.4-sources.jar
通过maven依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.11.4</version>
</dependency>
b) 使用:参考MongodbTest项目中的Testclass.java类以及ZSGC.java类。
package com;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Set;
import org.junit.Test;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
public class Testclass{
public static void main(String[] args) throws UnknownHostException {
//方式一:直接连接单一mongodb服务器(注意这种方式不会自动发现mongodb集群中的主服务器)
MongoClient mongoClient1 = new MongoClient();
// Mongo mongoClient1 = new Mongo();
//方式二(指定ip):
//MongoClient mongoClient2 = new MongoClient( "localhost" );
////方式二(指定ip、端口):
//MongoClient mongoClient3 = new MongoClient( "localhost" , 27017 );
////方式三:连接到mongodb服务器集群(会自动发现主服务器)
//MongoClient mongoClient4 = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017),
// new ServerAddress("localhost", 27018),
// new ServerAddress("localhost", 27019)));
DB db = mongoClient1.getDB("local");
DBCollection users = db.getCollection("users");
/**
* DBObject代表文档,这是一个接口,java中提供了多种实现,最简单的就是BasicDBObject了
*/
DBObject user = new BasicDBObject();
user.put("name", "jimmy");
user.put("age", "34");
DBObject address = new BasicDBObject();
address.put("city", "bj");
address.put("street", "bq road");
address.put("mail", "ufpark 68#");
address.put("测试","测试结果");
/**
* 对于内嵌文档,我们需要先将内嵌文档填充后,再填充到外层文档中!
*/
user.put("address", address);
// 将该文档插入到集合中
users.insert(user);
// 从集合中查询数据,我们就查询一条,调用findOne即可
DBObject dbUser = users.findOne();
System.out.println("name" + " : " + dbUser.get("name") );
System.out.println("age" + " : " + dbUser.get("age") );
DBObject dbAddress = (DBObject)user.get("address");
System.out.println("city" + " : " + dbAddress.get("city") );
System.out.println("street" + " : " + dbAddress.get("street") );
System.out.println("mail" + " : " + dbAddress.get("mail") );
//获取到MongoDB上的所有集合,无法实现。
// Set<String> colls = db.getCollectionNames();
// for (String s : colls) {
// System.out.println(s+"dsdsfdf");
// }
//获取单一集合
//调用db的getCollection(String collectionName)方法获得单一集合
// DBCollection coll = db.getCollection("collName");
// System.out.println(coll);
}
public void creatConnect() throws Exception{
//方式一:直接连接单一mongodb服务器(注意这种方式不会自动发现mongodb集群中的主服务器)
MongoClient mongoClient1 = new MongoClient();
//方式二(指定ip):
//MongoClient mongoClient2 = new MongoClient( "localhost" );
////方式二(指定ip、端口):
//MongoClient mongoClient3 = new MongoClient( "localhost" , 27017 );
////方式三:连接到mongodb服务器集群(会自动发现主服务器)
//MongoClient mongoClient4 = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017),
// new ServerAddress("localhost", 27018),
// new ServerAddress("localhost", 27019)));
DB db = mongoClient1.getDB("local");
//获取到MongoDB上的所有集合
Set<String> colls = db.getCollectionNames();
for (String s : colls) {
System.out.println(s+"dsdsfdf");
}
//获取单一集合
//调用db的getCollection(String collectionName)方法获得单一集合
// DBCollection coll = db.getCollection("testCollection");
}
}
package com;
import java.util.Date;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
public class ZSGC {
public static void main(String[] args) {
try {
//建立连接,无参默认是("localhost",27017)
Mongo mongo = new Mongo("127.0.0.1",27017);
/**** 获取数据库db ****/
// 如果数据库不存在,则创建一个
DB db = mongo.getDB("testMongoDb");
//数据库名称,密码。
// boolean ok = db.authenticate("root","root".toCharArray());
// if(ok){
// System.out.println("db connection success!");
//
// }{
// System.out.println("db connection fail !");
// }
/**** 获取集合相当于mysql的表,"user"为表名 ****/
// 如果集合不存在则创建一个
DBCollection table = db.getCollection("user");
/**** 增 ****/
// 创建一个文本来存储key,value
BasicDBObject document = new BasicDBObject();
document.put("name", "mkyong");
document.put("age", 30);
document.put("createdDate", new Date());
table.insert(document);
/**** 查 ****/
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "mkyong");
DBCursor cursor = table.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
/**** 改 ****/
// 根据query查询到文本,然后修改该文本。
BasicDBObject query = new BasicDBObject();
query.put("name", "mkyong");
BasicDBObject newDocument = new BasicDBObject();
newDocument.put("name", "mkyong-updated");
BasicDBObject updateObj = new BasicDBObject();
updateObj.put("$set", newDocument);
table.update(query, updateObj);
/**** 删 ****/
//根据query查询到文本然后删除。DBCursor文本
BasicDBObject searchQuery2
= new BasicDBObject().append("name", "mkyong-updated");
DBCursor cursor2 = table.find(searchQuery2);
while (cursor2.hasNext()) {
System.out.println(cursor2.next());
table.remove(searchQuery2);
}
/**** 删除数据集 ****/
db.getCollection("user").drop();
/**** Done ****/
System.out.println("Done");
} catch (Exception e) {
e.printStackTrace();
}
}
}