原文出自: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(); } } }
相关推荐
在分析源码时,我们可以看到Spring Data MongoDB是如何将Java对象映射到MongoDB文档,以及如何生成更新语句的。这有助于我们更好地理解其工作原理,优化性能,以及解决潜在的问题。 总的来说,Spring Data MongoDB...
- **文档(Document)**:MongoDB 中的基本数据单位,相当于一条记录,采用 BSON(Binary JSON)格式存储。 在 Java 中,我们可以通过 `Mongo` 类来建立与 MongoDB 的连接。例如: ```java Mongo mongo = new Mongo...
在本文中,我们将深入探讨如何使用Java来与MongoDB数据库进行交互,主要涵盖增、删、改、查(CRUD)等基本操作。MongoDB是一个流行的NoSQL数据库系统,以其灵活性、高性能和易于扩展性而受到开发者的青睐。Java作为...
MongoDB的Java驱动是连接Java应用程序与MongoDB数据库的关键组件,它提供了丰富的API来执行各种数据库操作。在本示例中,我们将深入探讨如何使用Java驱动实现与MongoDB的交互。 首先,确保已经在项目中引入了...
在Java开发中,MongoDB是一个常用的NoSQL数据库,以其灵活性、高性能和易扩展性而备受青睐。本项目针对MongoDB进行了底层封装,旨在提供一套简洁、高效的API,使得开发人员可以更加便捷地进行数据的增删查改操作,...
在Java开发中,我们通常使用MongoDB Java驱动程序来与数据库进行交互,实现DAO(Data Access Object)模式,以便更好地组织数据库操作。 在“mongodb_整合java_dao”这个主题中,我们将讨论如何在Java应用中集成...
1. 定义实体类:使用`@Document`注解标记MongoDB的文档对应的Java类,例如: ```java @Document(collection = "users") public class User { @Id private String id; private String name; private String email...
在Java开发环境中,MongoDB提供了Java驱动API,使得Java程序员可以方便地与MongoDB进行交互。本文档将深入探讨如何利用Java驱动API来操作MongoDB数据库。 一、MongoDB Java驱动API简介 MongoDB的Java驱动程序是Java...
Java连接MongoDB主要涉及到的是Java驱动程序的使用,这使得Java开发者能够与MongoDB数据库进行交互,执行增、删、改、查等基本操作。MongoDB是一个基于分布式文件存储的高性能、开源、无模式的文档数据库,而Java...
Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...
Document foundDocument = collection.find(queryDocument).first(); if (foundDocument != null) { System.out.println("Found document:"); System.out.println(foundDocument.toJson()); } else { System...
3. **Document**: 在Spring Data MongoDB中,数据模型通常映射为`@Document`注解的Java类。这些类定义了数据结构,并通过注解如`@Id`(标识符)来配置字段。 4. **Query方法**: 通过在Repository接口上声明方法名,...
在Java开发中,MongoDB作为一个流行的NoSQL数据库,被广泛用于处理海量数据和高并发场景。为了方便Java程序员与MongoDB交互,通常会创建一些实用工具类,将常见的数据库操作封装起来,降低代码复杂性。本篇文章将...
"mongodb-demo示例"是一个基于Java的MongoDB应用实例,它展示了如何使用Java API与MongoDB进行集成。这个示例可以帮助开发者理解如何在实际项目中有效地利用MongoDB。 首先,你需要在项目中引入MongoDB的Java驱动...
document.put("msg", "hello world mongoDB in Java"); // 插入文档到集合中 collection.insert(document); // 创建查询条件 BasicDBObject searchQuery = new BasicDBObject(); searchQuery.put("id", 1001...
4. **MongoTemplate**:对于更复杂的查询或自定义操作,MongoTemplate类提供了低级别的访问,允许直接操作MongoDB的Document对象。 5. **嵌入式对象支持**:MongoDB支持嵌入式文档,Spring Data MongoDB提供了对...
在IT行业中,Java是一种广泛应用的编程语言,MongoDB则是一种流行的NoSQL数据库系统,两者结合可以构建高效的数据处理和存储解决方案。在这个特定的场景中,我们关注的是如何使用Java进行MongoDB的分页查询,这在大...
SpringBoot集成MongoDB是现代Java应用中常见的数据库交互方式,MongoDB作为一个流行的NoSQL数据库,以其灵活的数据模型、高性能和高可用性深受开发者喜爱。在SpringBoot框架中,通过Spring Data MongoDB模块,我们...
在 Spring Boot 中,我们将 MongoDB 的集合映射为 Java 类,通常使用 `@Document` 注解来标识。例如,创建一个名为 `User` 的实体类: ```java import org.springframework.data.annotation.Id; import org.spring...
在Java开发中,我们通常使用Java驱动程序来与MongoDB进行交互,实现对数据库的增删改查操作。下面将详细介绍如何使用Java连接MongoDB以及执行基本的数据操作。 首先,要使用Java连接MongoDB,我们需要添加MongoDB的...