java 操作mongo, 查询语句

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"))));

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值