风中的男人 發表於 2019-8-16 11:42:00

java 连接 mongodb 及使用

<p>MongoDB是当今非常流行的一款NoSQL数据库,本文介绍如何使用MongoDB的Java驱动来操作MongoDB。</p>
<h2>一、引入MongoDB Java Driver包</h2>
<hr>
<p>&nbsp;</p>
<p>如果需要操作MongoDB的Java项目是一个Maven项目,可以在依赖中加上以下的配置。</p>
<blockquote>
<pre>&lt;dependencies&gt;
&nbsp; &nbsp;&lt;dependency&gt;
&nbsp; &nbsp; &nbsp; &nbsp;&lt;groupId&gt;org.mongodb&lt;/groupId&gt;
&nbsp; &nbsp; &nbsp; &nbsp;&lt;artifactId&gt;mongo-java-driver&lt;/artifactId&gt;
&nbsp; &nbsp; &nbsp; &nbsp;&lt;version&gt;2.13.2&lt;/version&gt;
&nbsp; &nbsp;&lt;/dependency&gt;
&lt;/dependencies&gt;</pre>
</blockquote>
<p>&nbsp;</p>
<p>或者通过直接下载jar包的方式使用,下载地址:mongo-java-driver-2.13.2.jar。</p>
<p>详细的如何引入MongoDB jar包的方法可以参考官方文档。</p>
<p>&nbsp;</p>
<h2><strong>二、连接MongoDB</strong></h2>
<hr>
<p>&nbsp;</p>
<p>可以使用MongoClient来连接MongoDB,MongoClient的使用方式如下:</p>
<blockquote>
<pre>MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("mydb");</pre>
</blockquote>
<p>&nbsp;</p>
<p>上面的代码连接了localhost:27017上MongoDB服务,并指定使用mydb数据库。连接后便可以对这个数据库作进一步的操作。</p>
<p>&nbsp;</p>
<p>需要指出的是,MongoClient是线程安全的,可以在多程程环境中共享同一个MongoClient。通常来说,一个应用程序中,只需要生成一个全局的MongoClient实例,然后在程序的其他地方使用这个实例即可。</p>
<p>&nbsp;</p>
<h2><strong>三、认证</strong></h2>
<hr>
<p>&nbsp;</p>
<p>可以使用多种方式对连接进行认证,下面介绍两种方式。</p>
<p>&nbsp;</p>
<h3><strong>1. 方式一:MongoCredential</strong></h3>
<p>&nbsp;</p>
<p>MongoCredential类的createCredential方法可以指定认证的用户名,密码,以及使用的数据库,并返回一个MongoCredential对象。其方法的声明如下:</p>
<blockquote>
<pre>static MongoCredential createCredential(<br>String userName, String database, char[] password)</pre>
</blockquote>
<p>&nbsp;</p>
<p>例如</p>
<blockquote>
<pre>MongoCredential credential = MongoCredential.createCredential(<br>"user", "mydb", "password".toCharArray());</pre>
</blockquote>
<p>&nbsp;</p>
<p>上面创建了一个用户名为user,密码为password,数据库为mydb的MongoCredential对象。</p>
<p>&nbsp;</p>
<p>将生成MongoCredential的对象作为MongoClient构造函数的参数。由于MongoClient构造函数的为List&lt;MongoCredential&gt;类型,所以需要先构造成一个List再传递。</p>
<p>&nbsp;</p>
<p>完整的认证的例子如下:</p>
<blockquote>
<pre>MongoCredential credential = MongoCredential.createCredential(<br>"user", "mydb", "password".toCharArray());
<br>ServerAddress serverAddress = new ServerAddress("localhost", 27017);
MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(credential));
DB db = mongoClient.getDB("mydb");</pre>
</blockquote>
<h3>&nbsp;</h3>
<h3><strong>2. 方式二:MongoClientURI</strong></h3>
<p>&nbsp;</p>
<p>亦可以使用MongoClientURI完成MongoDB的认证,它代表了一个URI对象。MongoClientURI的构造函数接受一个String类型的字符串,这个字符串的格式如下:</p>
<blockquote>
<pre>mongodb://<br>host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[?options]]</pre>
</blockquote>
<p>&nbsp;</p>
<p>生成的MongoClientURI对象作为MongoClient构造函数的参数,完整的认证例子如下:</p>
<blockquote>
<pre>String sURI = String.format(<br>"mongodb://%s:%s@%s:%d/%s", "user", "password", "localhost", 27017, "mydb");
<br>MongoClientURI uri = new MongoClientURI(sURI);
MongoClient mongoClient = new MongoClient(uri);
DB db = mongoClient.getDB("mydb");</pre>
</blockquote>
<h2>&nbsp;</h2>
<h2><strong>四、获取一个集合</strong></h2>
<hr>
<p>&nbsp;</p>
<blockquote>
<pre>DBCollection coll = db.getCollection("mycol");</pre>
</blockquote>
<p>&nbsp;</p>
<p>然后可以对指定的集合进行操作,例如,插入,删除,查找,更新文档等。</p>
<h2>&nbsp;</h2>
<h2><strong>五、插入文档</strong></h2>
<hr>
<p>&nbsp;</p>
<p>例如,一个文档以Json来表示如下,</p>
<blockquote>
<pre>{ “name”: “mongo”, “info”: { “ver”: “3.0” } }</pre>
</blockquote>
<p>&nbsp;</p>
<p>现在需要插入到集合mycol中。为了插入到集合中,可以使用BasicDBObject构造一个文档。</p>
<blockquote>
<pre>BasicDBObject doc = new BasicDBObject("name", "mongo").append(<br>"info", new BasicDBObject("ver", "3.0"));<br>coll.insert(doc);</pre>
</blockquote>
<h2>&nbsp;</h2>
<h2><strong>六、查找文档</strong></h2>
<hr>
<p>&nbsp;</p>
<h3><strong>1. 通过findOne查找一个符合条件文档</strong></h3>
<p>&nbsp;</p>
<p>通过findOne可以查找一个符合条件的文档。例如,对于上面的mycol集合,执行以下命令:</p>
<blockquote>
<pre>DBObject myDoc = coll.findOne();
System.out.println(myDoc);</pre>
</blockquote>
<p>&nbsp;</p>
<p>将输出mycol集合中的第一个文档。也可以通过指定findOne的查找参数,来查找符合查找条件的一个文档。</p>
<p>&nbsp;</p>
<h3><strong>2. 通过find查找所有符合条件的文档</strong></h3>
<p>&nbsp;</p>
<p>find用来查找符合条件的文档,它返回一个DBCursor对象,通过遍历DBCursor对象,可以获得所有符合查找条件的文档。</p>
<p><br>为了说明和测试,我们先插入一批以下格式的文档</p>
<blockquote>
<pre>{ “i”: value }</pre>
</blockquote>
<blockquote>
<pre>for (int i=0; i &lt; 100; i++) {
&nbsp; &nbsp;coll.insert(new BasicDBObject("i", i));
}</pre>
</blockquote>
<p>&nbsp;</p>
<p>find的使用示例如下:</p>
<blockquote>
<pre>DBCursor cursor = coll.find();
try {
&nbsp; while(cursor.hasNext()) {
&nbsp; &nbsp; &nbsp; System.out.println(cursor.next());
&nbsp; }
} finally {
&nbsp; cursor.close();
}</pre>
</blockquote>
<p>&nbsp;</p>
<p>会输出mycol集合中所有的文档。</p>
<p>&nbsp;</p>
<p>也可以指定查找的条件,例如:</p>
<blockquote>
<pre>BasicDBObject query = new BasicDBObject("i", 71);

DBCursor cursor = coll.find(query);

try {
&nbsp; while(cursor.hasNext()) {
&nbsp; &nbsp; &nbsp; System.out.println(cursor.next());
&nbsp; }
} finally {
&nbsp; cursor.close();
}</pre>
</blockquote>
<p>&nbsp;</p>
<p>对于查找条件中包括$操作符的情形,例如以下一条mongo shell命令:</p>
<blockquote>
<pre>db.coll.find({i: {$gte: 50}});</pre>
</blockquote>
<p>&nbsp;</p>
<p>可以使用DBObject生成查找条件,</p>
<blockquote>
<pre>// find all where i &gt;= 50
BasicDBObject query = new BasicDBObject("i", new BasicDBObject("$gte", 50));

DBCursor cursor = coll.find(query);
try {
&nbsp; &nbsp;while (cursor.hasNext()) {
&nbsp; &nbsp; &nbsp; &nbsp;System.out.println(cursor.next());
&nbsp; &nbsp;}
} finally {
&nbsp; &nbsp;cursor.close();
}</pre>
</blockquote>
<h2>&nbsp;</h2>
<h2><strong>七、更新文档</strong></h2>
<hr>
<p>&nbsp;</p>
<blockquote>
<pre>BasicDBObject query = new BasicDBObject("i", 70);
BasicDBObject up = new BasicDBObject("$set", new BasicDBObject("i", 100));
coll.update(query, up);</pre>
</blockquote>
<p>&nbsp;</p>
<p>上面的语句将i为70的文档更新i的值等于100。</p>
<p>&nbsp;</p>
<p>与我们常用的更新文档的mongo语句一样,DBCollection还包含了save,findAndModify等更新文档的方法,其使用方法在此不再赘述,可以参考API说明文档即可。</p>
<p>&nbsp;</p>
<h2><strong>八、删除文档</strong></h2>
<hr>
<p>&nbsp;</p>
<p>可以通过生成一个DBObject对象来删除指定的文档,例如:</p>
<blockquote>
<pre>BasicDBObject query = new BasicDBObject("i", 71);
coll.remove(query);</pre>
</blockquote>
<p>&nbsp;</p>
<p>上面的语句删除i为71的文档。</p>
<p>&nbsp;</p>
<h1><strong>九、参考资料</strong></h1>
<hr>
<p>&nbsp;</p>
<ul class="list-paddingleft-2">
<li>
<p>http://mongodb.github.io/mongo-java-driver/2.13/getting-started/installation-guide/</p>
</li>
<li>
<p>http://mongodb.github.io/mongo-java-driver/2.13/getting-started/quick-tour/</p>
</li>
<li>
<p>https://github.com/mongodb/mongo-java-driver/blob/2.13.x/src/examples/example/QuickTour.java</p>
</li>
<li>
<p>http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/authenticating/</p>
</li>
<li>
<p>http://api.mongodb.org/java/3.0/?com/mongodb/MongoClientURI.html</p>
</li>
<li>
<p>http://api.mongodb.org/java/2.13/</p>
</li>
</ul>
<p>文章地址:http://blog.csdn.net/lihao21/article/details/46939269</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/ooo0/p/11362933.html
頁: [1]
查看完整版本: java 连接 mongodb 及使用