mongo 中存储的数据
[
{
"name": "xiaohong",
"age": 20,
"addr": {
"number": 10,
"street": "abc"
},
"contact": [
{
"type": "phone",
"number": 12345
},
{
"type": "email",
"number": "123@163.com"
}
],
"sex": "woman"
},
{
"name": "xiaoming",
"age": 25,
"addr": {
"number": 9,
"street": "def"
},
"contact": [
{
"type": "phone",
"number": 56789
},
{
"type": "email",
"number": "456@163.com"
}
],
"sex": "man"
},
{
"name": "xiaowang",
"age": 30,
"addr": {
"number": 20,
"street": "xyz"
},
"contact": [
{
"type": "phone",
"number": 89012
},
{
"type": "email",
"number": "789@163.com"
}
],
"sex": "man"
}
]
//以下所有coll 均是mongo中对应的DBCollection 实例
查询:
一 . 对于关系型数据库的where子句,基本都是可以写出对应的: 具体如下:
1. select * from table_name;
coll.find(), or coll.find(null)
2. select name from table_name where age = 25;
// coll.find(query, keys);
coll.find(new BasicDBObject("age", 25), new BasicDBObject("name", 1).append("_id", 0));
3. select name form table_name where age > 25;
coll.find(new BasicDBObject("age", new BasicDBObject("$gt", 25)), new BasicDBObject("name", 1).append("_id", 0));
4.select * from table_name where age = 25 or name = `xiaohong`
<span style="white-space:pre"> </span>BasicDBObject query = new BasicDBObject();
BasicDBList values = new BasicDBList();
values.add(new BasicDBObject("age", 25));
values.add(new BasicDBObject("name", "xiaohong"));
query.append("$or", values);
DBCursor find = coll.find(query);
5. select * from table_name where sex = `man` and ( age = 25 or age = 30)
<span style="white-space:pre"> </span>BasicDBList values = new BasicDBList();
values.add(new BasicDBObject("age", 25));
values.add(new BasicDBObject("age", 30));
DBObject query = new BasicDBObject().append("$or", values).append("sex", "man");
DBCursor find = coll.find(query)
6.select * from table_name where age in ( 20, 30)
<span style="white-space:pre"> </span>BasicDBObject query = new BasicDBObject("age",new BasicDBObject("$in", new int[] {20, 25}));
DBCursor find = coll.find(query);
二 .对于需要的列(即select后面的列) ,通用是这样: new BasicDBObject().append(key1, 1).append(key2, 1).....其中“_id"比较特殊, 默认是显示的,若不用这应有append("_id", 0)
三 . 对于order by 子句, BasicDBObject order = new BasicDBObject().append("name", 1).append("age", -1); 1表示正序, 0 表示逆序
四 .对于limit, 有: DBCursor.batchSize() , 和DBCursor.limit() 来提供支持
查询嵌套结构:
1.查询street 是abc的文档
coll.find(new BasicDBObject("addr.street", "abc"));
2.查询email为123@163.com的文档
coll.find(new BasicDBObject().append("contact", new BasicDBObject("$elemMatch", new BasicDBObject().append("type", "email").append("number", "123@163.com"))));