日期:2014-05-16  浏览次数:20432 次

MongoDB基本用法(增删改高级查询、mapreduce)

分享一下我经常用到的自己写的mongo用法示例

该示例基于当前最新的mongo驱动,版本为mongo-2.10.1.jar,用junit写的单元测试。

?

TestCase.java

package com.wujintao.mongo;

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;

import org.junit.Test;

import com.mongodb.AggregationOutput;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
import com.mongodb.Mongo;
import com.mongodb.QueryBuilder;
import com.mongodb.WriteConcern;

public class TestCase {

	@Test
	/**
	 * 获取所有数据库实例
	 */
	public void testGetDBS() {
		List<String> dbnames = MongoUtil.getMong().getDatabaseNames();
		for (String dbname : dbnames) {
			System.out.println("dbname:" + dbname);
		}
	}

	@Test
	/**
	 * 删除数据库
	 */
	public void dropDatabase() {
		MongoUtil.getMong().dropDatabase("my_new_db");
	}

	@Test
	/**
	 * 查询所有表名
	 */
	public void getAllCollections() {
		Set<String> colls = MongoUtil.getDB().getCollectionNames();
		for (String s : colls) {
			System.out.println(s);
		}
	}

	@Test
	public void dropCollection() {
		MongoUtil.getColl("jellonwu").drop();
	}

	/**
	 * 添加一条记录
	 */
	@Test
	public void addData() {
		DBCollection coll = MongoUtil.getColl("wujintao");
		BasicDBObject doc = new BasicDBObject();
		doc.put("name", "MongoDB");
		doc.put("type", "database");
		doc.put("count", 1);

		BasicDBObject info = new BasicDBObject();
		info.put("x", 203);
		info.put("y", 102);
		doc.put("info", info);
		coll.insert(doc);
		// 设定write concern,以便操作失败时得到提示
		coll.setWriteConcern(WriteConcern.SAFE);
	}

	@Test
	/**
	 * 创建索引
	 */
	public void createIndex() {
		MongoUtil.getColl("wujintao").createIndex(new BasicDBObject("i", 1));
	}

	@Test
	/**
	 * 获取索引信息
	 */
	public void getIndexInfo() {
		List<DBObject> list = MongoUtil.getColl("hems_online").getIndexInfo();
		for (DBObject o : list) {
			System.out.println(o);
		}
	}

	@Test
	/**
	 * 添加多条记录
	 */
	public void addMultiData() {
		for (int i = 0; i < 100; i++) {
			MongoUtil.getColl("wujintao").insert(
					new BasicDBObject().append("i", i));
		}

		List<DBObject> docs = new ArrayList<DBObject>();
		for (int i = 0; i < 50; i++) {
			docs.add(new BasicDBObject().append("i", i));
		}
		MongoUtil.getColl("wujintao").insert(docs);
		// 设定write concern,以便操作失败时得到提示
		MongoUtil.getColl("wujintao").setWriteConcern(WriteConcern.SAFE);
	}

	@Test
	/**
	 * 查找第一条记录
	 */
	public void findOne() {
		DBObject myDoc = MongoUtil.getColl("wujintao").findOne();
		System.out.println(myDoc);
	}

	@Test
	/**
	 * 获取表中所有记录条数
	 */
	public void count() {
		System.out.println(MongoUtil.getColl("wujintao").getCount());
		System.out.println(MongoUtil.getColl("wujintao").count());
	}

	@Test
	/**
	 * 获取查询结果集的记录数
	 */
	public void getCount() {
		DBObject query = new BasicDBObject("name", "a");
		long count = MongoUtil.getColl("wujintao").count(query);
		System.out.println(count);
	}

	@Test
	/**
	 * 查询所有结果
	 */
	public void getAllDocuments() {
		DBCursor cursor = MongoUtil.getColl("wujintao").find();
		try {
			while (cursor.hasNext()) {
				System.out.println(cursor.next());
			}
		} finally {
			cursor.close();
		}
	}

	@Test
	/**
	 * 按照一个条件查询
	 */
	public void queryByConditionOne() {
		BasicDBObject query = new BasicDBObject();
		query.put("name", "MongoDB");
		DBCursor cursor = MongoUtil.getColl("wujintao").find(query);

		try {
			while (cursor.hasNext()) {
				System.out.println(cursor.next());
			}
		} finally {
			cursor.close();
		}
	}

	@Test
	/**
	 * AND多条件查询,区间查询
	 */
	public void queryMulti() {
		BasicDBObject query = new BasicDBObject();
		// 查询j不等于3,k大于10的结