您的位置:首页 > 数据库 > Mongodb

java mongodb 基础系列---查询,排序,limit,$in,$or,输出为list,创建索引,$ne 非操作

2013-12-18 16:58 946 查看
官方api教程http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/#getting-started-with-java-driver

package com.infomorrow.webroot;

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.MongoClient;

public class test_mongodb {
public static void  main(String args[]) throws Exception {
MongoClient        mongoClient = new MongoClient( "127.0.0.1" , 27017 );//建立连接
DB get_db_credit = mongoClient.getDB("credit_2");//数据库名
DBCollection collection = get_db_credit.getCollection("report");//集合名,对应mysql中的表名
BasicDBObject filter_dbobject = new BasicDBObject();

//建立查询条件,如果还有其他条件,类似的写即可
// 如:version=3,filter_dbobject.put("version", 3),mongod区分String 和 Integer类型,所以要小心"3"!=3
filter_dbobject.put("user_id", "10065716153075");

//下面执行查询,设置limit,只要10条数据,排序(类mysql orderby) 再建一个BasicDBObject即可,-1表示倒序
DBCursor cursor = collection.find(filter_dbobject).limit(10).sort(new BasicDBObject("create_time",-1));

//把结果集输出成list类型
 List<DBObject> list = cursor.toArray();
System.out.println(list.size());//list的长度
System.err.println(cursor.count());//计算结果的数量,类似于(mysql count()函数),不受limit的影响

//遍历结果集
while(cursor.hasNext()) {
System.out.println(cursor.next());
}
}
}


补充:1.关于查询:如果想要查 "a=30或a=50"这样的条件怎么办?

可以使用$in进行查询:

@Test
public void testIn(){
//a=30或者a=50
DBObject queryCondition = new BasicDBObject();

  BasicDBList values = new BasicDBList();
values.add(30);
values.add(50);
queryCondition.put("a", new BasicDBObject("$in", values));

DBCursor dbCursor = coll.find(queryCondition);

}


2.关于查询:如果想要查 "a>30或a<10"这样的条件怎么办?

[b]可以使用$or进行查询:[/b]

@Test
public void testOrSingleField(){
DBObject queryCondition = new BasicDBObject();
//查询a<10 OR a>30
            BasicDBList values = new BasicDBList();
values.add(new BasicDBObject("a", new BasicDBObject("$gt", 30)));
values.add(new BasicDBObject("a", new BasicDBObject("$lt", 10)));
queryCondition.put("$or", values);

DBCursor dbCursor = coll.find(queryCondition);

}


那么,如果想要查 "a>30或b<10"这样的条件怎么办?

只需要将上面代码改为如下,即可:

values.add(new BasicDBObject("b", new BasicDBObject("$lt", 10)));


3.如果是多值and查询只用new BasicDBobject(),然后再put即可,如下所示:

BasicDBObject basic=new BasicDBObject();
basic.put("name","amosli");
basic.put("hobby","code");
....
collection.find(basic).toArray();//将值转为list


4.创建索引

// 创建索引
BasicDBObject obj = new BasicDBObject();
obj.put("create_time", -1);
collection.ensureIndex(obj);
// 查询索引,遍历索引
List<DBObject> list = collection.getIndexInfo();
for (DBObject o : list) {
System.out.println("\t" + o);
}


5.查询非操作

查询level为INFO,但status不为"已完成"的所结果数

//not equal 非操作
BasicDBObject basicDBObject = new BasicDBObject("level","INFO");
System.out.println(collection.count(basicDBObject.append("status", new BasicDBObject("$ne",  "已完成"))));


另,可参见:

1.http://blog.csdn.net/llhhyy1989/article/details/12571111

2./article/1456210.html

3.http://docs.mongodb.org/manual/reference/operator/query/ 查询命令,$ne,$in
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: