`

Java MongoDB : Query document(译)

阅读更多

 

原文出自:http://www.mkyong.com/mongodb/java-mongodb-query-document/

返回目录:http://ysj5125094.iteye.com/blog/2192754  

 

Java MongoDB : Query document

In this tutorial, we show you few common ways to get or query document from collection.

译:在本教程中,我们向你展示一些常见的从集合获取和查询文档的方式。

Test Data

Insert 5 dummy documents for testing.

译:插入5条虚拟的测试记录(文档)。

 

{ "_id" : { "$oid" : "id"} , "number" : 1 , "name" : "mkyong-1"}
{ "_id" : { "$oid" : "id"} , "number" : 2 , "name" : "mkyong-2"}
{ "_id" : { "$oid" : "id"} , "number" : 3 , "name" : "mkyong-3"}
{ "_id" : { "$oid" : "id"} , "number" : 4 , "name" : "mkyong-4"}
{ "_id" : { "$oid" : "id"} , "number" : 5 , "name" : "mkyong-5"}

 

1. Find() examples

1.1 Get first matched document only. 

译:获取第一个匹配的文档。

 

	DBObject doc = collection.findOne();
	System.out.println(dbObject);

Output 

 

 

{ "_id" : { "$oid" : "id"} , "number" : 1 , "name" : "mkyong-1"}

1.2 Get all matched documents. 

 

译:获取所有匹配的文档。

 

	DBCursor cursor = collection.find();
	while(cursor.hasNext()) {
	    System.out.println(cursor.next());
	}

Output 

 

 

{ "_id" : { "$oid" : "id"} , "number" : 1 , "name" : "mkyong-1"}
{ "_id" : { "$oid" : "id"} , "number" : 2 , "name" : "mkyong-2"}
{ "_id" : { "$oid" : "id"} , "number" : 3 , "name" : "mkyong-3"}
{ "_id" : { "$oid" : "id"} , "number" : 4 , "name" : "mkyong-4"}
{ "_id" : { "$oid" : "id"} , "number" : 5 , "name" : "mkyong-5"}

1.3 Get single field from matched document. 

 

译:从匹配的文档中获取单个字段。

 

	BasicDBObject allQuery = new BasicDBObject();
	BasicDBObject fields = new BasicDBObject();
	fields.put("name", 1);
 
	DBCursor cursor = collection.find(allQuery, fields);
	while (cursor.hasNext()) {
		System.out.println(cursor.next());
	}

Output 

 

{ "_id" : { "$oid" : "id"} , "name" : "mkyong-1"}
{ "_id" : { "$oid" : "id"} , "name" : "mkyong-2"}
{ "_id" : { "$oid" : "id"} , "name" : "mkyong-3"}
{ "_id" : { "$oid" : "id"} , "name" : "mkyong-4"}
{ "_id" : { "$oid" : "id"} , "name" : "mkyong-5"}

2. Find() and Comparison

2.1 Get all documents where number = 5. 

译:获取所有number=5的文档。

	BasicDBObject whereQuery = new BasicDBObject();
	whereQuery.put("number", 5);
	DBCursor cursor = collection.find(whereQuery);
	while(cursor.hasNext()) {
	    System.out.println(cursor.next());
	}

Output 

{ "_id" : { "$oid" : "id"} , "number" : 5 , "name" : "mkyong-5"}

2.2 $in example – Get documents where number in 2, 4 and 5. 

译:$in例子 ---- 获取 number in (2,3,5) 的文档。

BasicDBObject inQuery = new BasicDBObject();
	List<Integer> list = new ArrayList<Integer>();
	list.add(2);
	list.add(4);
	list.add(5);
	inQuery.put("number", new BasicDBObject("$in", list));
	DBCursor cursor = collection.find(inQuery);
	while(cursor.hasNext()) {
		System.out.println(cursor.next());
	}

Output 

{ "_id" : { "$oid" : "id"} , "number" : 2 , "name" : "mkyong-2"}
{ "_id" : { "$oid" : "id"} , "number" : 4 , "name" : "mkyong-4"}
{ "_id" : { "$oid" : "id"} , "number" : 5 , "name" : "mkyong-5"}

2.3 $gt $lt example – Get documents where 5 > number > 2 . 

译:$gt $lt例子 ---- 获取 5 > number > 2 的文档。

	BasicDBObject gtQuery = new BasicDBObject();
	gtQuery.put("number", new BasicDBObject("$gt", 2).append("$lt", 5));
	DBCursor cursor = collection.find(gtQuery);
	while(cursor.hasNext()) {
		System.out.println(cursor.next());
	}

Output 

{ "_id" : { "$oid" : "id"} , "number" : 3 , "name" : "mkyong-3"}
{ "_id" : { "$oid" : "id"} , "number" : 4 , "name" : "mkyong-4"}

2.4 $ne example – Get documents where number != 4 . 

译:$ne例子 ---- 获取 number != 4的文档。

	BasicDBObject neQuery = new BasicDBObject();
	neQuery.put("number", new BasicDBObject("$ne", 4));
	DBCursor cursor = collection.find(neQuery);
	while(cursor.hasNext()) {
		System.out.println(cursor.next());
	}

Output 

{ "_id" : { "$oid" : "id"} , "number" : 1 , "name" : "mkyong-1"}
{ "_id" : { "$oid" : "id"} , "number" : 2 , "name" : "mkyong-2"}
{ "_id" : { "$oid" : "id"} , "number" : 3 , "name" : "mkyong-3"}
{ "_id" : { "$oid" : "id"} , "number" : 5 , "name" : "mkyong-5"}

3. find() and Logical

3.1 $and example – get documents where number = 2 and name = 'mkyong-2'. 

译:$and例子 ---- 获取 number = 2 and name = 'mkyong-2' 的文档。

	BasicDBObject andQuery = new BasicDBObject();
	List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
	obj.add(new BasicDBObject("number", 2));
	obj.add(new BasicDBObject("name", "mkyong-2"));
	andQuery.put("$and", obj);
 
	System.out.println(andQuery.toString());
 
	DBCursor cursor = collection.find(andQuery);
	while (cursor.hasNext()) {
		System.out.println(cursor.next());
	}

Output 

{ "$and" : [ { "number" : 2} , { "name" : "mkyong-2"}]}
{ "_id" : { "$oid" : "id"} , "number" : 2 , "name" : "mkyong-2"}

4. find() and Regex

Find document with regular expression pattern. 

译:查询与正则表达式匹配的文档。

4.1 $regex example – get documents where name like pattern 'Mky.*-[1-3]', case insensitive.

译:$regex 例子 ---- 获取name like pattern 'Mky.*-[1-3]'的文档,不区分大小写。

	BasicDBObject regexQuery = new BasicDBObject();
	regexQuery.put("name", 
		new BasicDBObject("$regex", "Mky.*-[1-3]")
		.append("$options", "i"));
 
	System.out.println(regexQuery.toString());
 
	DBCursor cursor = collection.find(regexQuery);
	while (cursor.hasNext()) {
		System.out.println(cursor.next());
	}

Output 

{ "name" : { "$regex" : "Mky.*-[1-3]" , "$options" : "i"}}
{ "_id" : { "$oid" : "515ad59e3004c89329c7b259"} , "number" : 1 , "name" : "mkyong-1"}
{ "_id" : { "$oid" : "515ad59e3004c89329c7b25a"} , "number" : 2 , "name" : "mkyong-2"}
{ "_id" : { "$oid" : "515ad59e3004c89329c7b25b"} , "number" : 3 , "name" : "mkyong-3"}

There are more…
Read this MongoDB operator documentation for complete set of query operators supported in MongoDB. 

译:阅读 MongoDB操作文档,了解更多。

5. Full Example

package com.mkyong.core;
 
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
 
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
 
/**
 * Java MongoDB : Query document
 * 
 * @author mkyong
 * 
 */
public class QueryApp {
 
	public static void insertDummyDocuments(DBCollection collection) {
 
		List<DBObject> list = new ArrayList<DBObject>();
 
		Calendar cal = Calendar.getInstance();
 
		for (int i = 1; i <= 5; i++) {
 
			BasicDBObject data = new BasicDBObject();
			data.append("number", i);
			data.append("name", "mkyong-" + i);
			// data.append("date", cal.getTime());
 
			// +1 day
			cal.add(Calendar.DATE, 1);
 
			list.add(data);
 
		}
 
		collection.insert(list);
 
	}
 
	public static void main(String[] args) {
 
	try {
 
	  Mongo mongo = new Mongo("localhost", 27017);
	  DB db = mongo.getDB("yourdb");
 
	  // get a single collection
	  DBCollection collection = db.getCollection("dummyColl");
 
	  insertDummyDocuments(collection);
 
	  System.out.println("1. Find first matched document");
	  DBObject dbObject = collection.findOne();
	  System.out.println(dbObject);
 
	  System.out.println("\n1. Find all matched documents");
	  DBCursor cursor = collection.find();
	  while (cursor.hasNext()) {
		System.out.println(cursor.next());
	  }
 
	  System.out.println("\n1. Get 'name' field only");
	  BasicDBObject allQuery = new BasicDBObject();
	  BasicDBObject fields = new BasicDBObject();
	  fields.put("name", 1);
 
	  DBCursor cursor2 = collection.find(allQuery, fields);
	  while (cursor2.hasNext()) {
		System.out.println(cursor2.next());
	  }
 
	  System.out.println("\n2. Find where number = 5");
	  BasicDBObject whereQuery = new BasicDBObject();
	  whereQuery.put("number", 5);
	  DBCursor cursor3 = collection.find(whereQuery);
	  while (cursor3.hasNext()) {
		System.out.println(cursor3.next());
	  }
 
	  System.out.println("\n2. Find where number in 2,4 and 5");
	  BasicDBObject inQuery = new BasicDBObject();
	  List<Integer> list = new ArrayList<Integer>();
	  list.add(2);
	  list.add(4);
	  list.add(5);
	  inQuery.put("number", new BasicDBObject("$in", list));
	  DBCursor cursor4 = collection.find(inQuery);
	  while (cursor4.hasNext()) {
		System.out.println(cursor4.next());
	  }
 
	  System.out.println("\n2. Find where 5 > number > 2");
	  BasicDBObject gtQuery = new BasicDBObject();
	  gtQuery.put("number", new BasicDBObject("$gt", 2).append("$lt", 5));
	  DBCursor cursor5 = collection.find(gtQuery);
	  while (cursor5.hasNext()) {
		System.out.println(cursor5.next());
	  }
 
	  System.out.println("\n2. Find where number != 4");
	  BasicDBObject neQuery = new BasicDBObject();
	  neQuery.put("number", new BasicDBObject("$ne", 4));
	  DBCursor cursor6 = collection.find(neQuery);
	  while (cursor6.hasNext()) {
		System.out.println(cursor6.next());
	  }
 
	  System.out.println("\n3. Find when number = 2 and name = 'mkyong-2' example");
	  BasicDBObject andQuery = new BasicDBObject();
 
	  List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
	  obj.add(new BasicDBObject("number", 2));
	  obj.add(new BasicDBObject("name", "mkyong-2"));
	  andQuery.put("$and", obj);
 
	  System.out.println(andQuery.toString());
 
	  DBCursor cursor7 = collection.find(andQuery);
	  while (cursor7.hasNext()) {
		System.out.println(cursor7.next());
	  }
 
	  System.out.println("\n4. Find where name = 'Mky.*-[1-3]', case sensitive example");
	  BasicDBObject regexQuery = new BasicDBObject();
	  regexQuery.put("name",
		new BasicDBObject("$regex", "Mky.*-[1-3]")
                    .append("$options", "i"));
 
	  System.out.println(regexQuery.toString());
 
	  DBCursor cursor8 = collection.find(regexQuery);
	  while (cursor8.hasNext()) {
		System.out.println(cursor8.next());
	  }
 
	  collection.drop();
 
	  System.out.println("Done");
 
	 } catch (UnknownHostException e) {
		e.printStackTrace();
	 } catch (MongoException e) {
		e.printStackTrace();
	 }
 
	}
}

 

 

References

  1. Query, Update, and Projection Operators Quick Reference

 

 

 

 

 

 

 

1
1
分享到:
评论

相关推荐

    Spring Data MongoDB : Update document

    在分析源码时,我们可以看到Spring Data MongoDB是如何将Java对象映射到MongoDB文档,以及如何生成更新语句的。这有助于我们更好地理解其工作原理,优化性能,以及解决潜在的问题。 总的来说,Spring Data MongoDB...

    MongoDB Java Driver 简单操作

    - **文档(Document)**:MongoDB 中的基本数据单位,相当于一条记录,采用 BSON(Binary JSON)格式存储。 在 Java 中,我们可以通过 `Mongo` 类来建立与 MongoDB 的连接。例如: ```java Mongo mongo = new Mongo...

    Java MongoDB 增删改查Demo程序

    在本文中,我们将深入探讨如何使用Java来与MongoDB数据库进行交互,主要涵盖增、删、改、查(CRUD)等基本操作。MongoDB是一个流行的NoSQL数据库系统,以其灵活性、高性能和易于扩展性而受到开发者的青睐。Java作为...

    mongodb的java驱动实现简单示例

    MongoDB的Java驱动是连接Java应用程序与MongoDB数据库的关键组件,它提供了丰富的API来执行各种数据库操作。在本示例中,我们将深入探讨如何使用Java驱动实现与MongoDB的交互。 首先,确保已经在项目中引入了...

    java-mongodb底层封装

    在Java开发中,MongoDB是一个常用的NoSQL数据库,以其灵活性、高性能和易扩展性而备受青睐。本项目针对MongoDB进行了底层封装,旨在提供一套简洁、高效的API,使得开发人员可以更加便捷地进行数据的增删查改操作,...

    mongodb_整合java_dao,以及用mongodb做附近人,或者是根据经纬多获取附近商家

    在Java开发中,我们通常使用MongoDB Java驱动程序来与数据库进行交互,实现DAO(Data Access Object)模式,以便更好地组织数据库操作。 在“mongodb_整合java_dao”这个主题中,我们将讨论如何在Java应用中集成...

    springboot-mongodb:springboot-mongodb

    1. 定义实体类:使用`@Document`注解标记MongoDB的文档对应的Java类,例如: ```java @Document(collection = "users") public class User { @Id private String id; private String name; private String email...

    MongoDB-Java驱动API

    在Java开发环境中,MongoDB提供了Java驱动API,使得Java程序员可以方便地与MongoDB进行交互。本文档将深入探讨如何利用Java驱动API来操作MongoDB数据库。 一、MongoDB Java驱动API简介 MongoDB的Java驱动程序是Java...

    java连接mongodb

    Java连接MongoDB主要涉及到的是Java驱动程序的使用,这使得Java开发者能够与MongoDB数据库进行交互,执行增、删、改、查等基本操作。MongoDB是一个基于分布式文件存储的高性能、开源、无模式的文档数据库,而Java...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...

    java查询mongodb中的objectid示例

    Document foundDocument = collection.find(queryDocument).first(); if (foundDocument != null) { System.out.println("Found document:"); System.out.println(foundDocument.toJson()); } else { System...

    spring-data-mongodb:所有Spring Mongodb项目

    3. **Document**: 在Spring Data MongoDB中,数据模型通常映射为`@Document`注解的Java类。这些类定义了数据结构,并通过注解如`@Id`(标识符)来配置字段。 4. **Query方法**: 通过在Repository接口上声明方法名,...

    Java访问MongoDB实用工具类

    在Java开发中,MongoDB作为一个流行的NoSQL数据库,被广泛用于处理海量数据和高并发场景。为了方便Java程序员与MongoDB交互,通常会创建一些实用工具类,将常见的数据库操作封装起来,降低代码复杂性。本篇文章将...

    mongodb-demo示例

    "mongodb-demo示例"是一个基于Java的MongoDB应用实例,它展示了如何使用Java API与MongoDB进行集成。这个示例可以帮助开发者理解如何在实际项目中有效地利用MongoDB。 首先,你需要在项目中引入MongoDB的Java驱动...

    java操作mongodb

    document.put("msg", "hello world mongoDB in Java"); // 插入文档到集合中 collection.insert(document); // 创建查询条件 BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("id", 1001...

    springdata-mongodb:Spring数据 + MongoDB

    4. **MongoTemplate**:对于更复杂的查询或自定义操作,MongoTemplate类提供了低级别的访问,允许直接操作MongoDB的Document对象。 5. **嵌入式对象支持**:MongoDB支持嵌入式文档,Spring Data MongoDB提供了对...

    java+mongodb+分页

    在IT行业中,Java是一种广泛应用的编程语言,MongoDB则是一种流行的NoSQL数据库系统,两者结合可以构建高效的数据处理和存储解决方案。在这个特定的场景中,我们关注的是如何使用Java进行MongoDB的分页查询,这在大...

    springboot-mongodb

    SpringBoot集成MongoDB是现代Java应用中常见的数据库交互方式,MongoDB作为一个流行的NoSQL数据库,以其灵活的数据模型、高性能和高可用性深受开发者喜爱。在SpringBoot框架中,通过Spring Data MongoDB模块,我们...

    mongodb与springboot集成例子

    在 Spring Boot 中,我们将 MongoDB 的集合映射为 Java 类,通常使用 `@Document` 注解来标识。例如,创建一个名为 `User` 的实体类: ```java import org.springframework.data.annotation.Id; import org.spring...

    NoSql,使用Java进行连接并进行增删改查,MongoDB

    在Java开发中,我们通常使用Java驱动程序来与MongoDB进行交互,实现对数据库的增删改查操作。下面将详细介绍如何使用Java连接MongoDB以及执行基本的数据操作。 首先,要使用Java连接MongoDB,我们需要添加MongoDB的...

Global site tag (gtag.js) - Google Analytics