Mongodb数据库DBObject对象和Json数据的转化(一.用Gson操作)

Mongodb官方提供的Java驱动,保存与读取,需要的者是DBObject对象,这是一个接口,实现put,get等方法,跟map类似,如 果我们要直接把普通的java对象保存到mongodb,就需要先转换成DBObject对象,或者直接实现DBObject接口,操作起来相当复杂。还 好,monodb驱动带了把json转换成DBObject对象的功能,加上Google的Gson,就可以实现把普通的对象保存到mongodb中。如 果要从mogodb中读出对象,反过来操作即可,但有一点需要注意的是,mongodb的文档没有固定的字段,所以用Gson转换,可能因为各个文档属性 不同,转出的对象属性都是空的,要确保在插入时都是插入同一个类的对象。
下面的例子是把User对象插入到Mongodb中,并读出来
User.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.mongo;
 
public class User {
	String name;
	int age;
	Oid _id;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	/**
	 * Mongodb会自动生成ObjectId
	 * @author fhp
	 *
	 */
	public class Oid{
		String $oid;
		public String get$oid() {
			return $oid;
		}
 
		public void set$oid(String $oid) {
			this.$oid = $oid;
		}
 
	}
}

Main.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.mongo;
 
import java.net.UnknownHostException;
 
import com.google.gson.Gson;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.util.JSON;
 
public class Main {
 
	/**
	 * @param args
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException {
		// TODO Auto-generated method stub
	    MongoClient mongoClient = new MongoClient();
 
	    DB psdoc = mongoClient.getDB("psdoc");
	    DBCollection user=psdoc.getCollection("user");
 
	    User u1=new User();
	    u1.setAge(20);
	    u1.setName("ssss");
	    Gson gson=new Gson();
	    //转换成json字符串,再转换成DBObject对象
	    DBObject dbObject = (DBObject) JSON.parse(gson.toJson(u1));
	    //插入数据库
	    user.insert(dbObject);
 
	    DBCursor cursor=user.find();
	    while(cursor.hasNext())
	    {
	    	DBObject obj=cursor.next();
	    	//反转
	    	User u=gson.fromJson(obj.toString(), User.class);
	    	System.out.println(u.name);
	    }
	}
 
}

为了方便,可以直接把Gson整合进驱动里,直接修改驱动的源代码
com.mongodb.DBCollection.java:
新增方法:

1
2
3
4
5
6
7
8
9
10
11
12
	/**
	 * 把普通的对象写入数据库
	 * 
	 * @param obj
	 * @return
	 */
	public WriteResult insert(Object obj) {
		Gson gson = new Gson();
		DBObject dbObject = (DBObject) JSON.parse(gson.toJson(obj));
		gson=null;
		return insert(dbObject);
	}

com.mongodb.DBCursor.java:
新增方法

1
2
3
4
5
6
7
8
9
10
11
12
13
    /**
     * 从数据库读出对象
     * @param obj
     * @param clazz
     * @return
     */
    public <T> T nextObj(Class<T> clazz) {
        _checkType( CursorType.ITERATOR );
        Gson gson=new Gson();
        T u=gson.fromJson(_next().toString(), clazz);
gson=null;
        return u;
    }

修改后的调用方法:
Main.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.mongo;
 
import java.net.UnknownHostException;
 
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;
 
public class Main {
 
	/**
	 * @param args
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException {
		// TODO Auto-generated method stub
	    MongoClient mongoClient = new MongoClient();
 
	    DB psdoc = mongoClient.getDB("psdoc");
	    DBCollection user=psdoc.getCollection("user");
 
	    User u1=new User();
	    u1.setAge(20);
	    u1.setName("ssss");
	    //直接插入对象
	    user.insert(u1);
	    DBCursor cursor=user.find();
	    while(cursor.hasNext())
	    {
	    	//传入类参数,反回该类对象
	    	User u=cursor.nextObj(User.class);
	    	System.out.println(u.name);
	    }
	}
 
}

© 2013, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Micronaut 中使用 MongoClient 和 MongoCollection 操作 MongoDB 数据库,可以使用以下代码来查询某个字段: 首先,确保你已经在 `build.gradle` 文件中添加了 MongoDB 驱动依赖。例如: ```groovy implementation("org.mongodb:mongodb-driver-sync:4.3.1") ``` 接下来,创建一个 MongoDB 的配置文件,例如 `application.yml`,添加 MongoDB 的连接信息: ```yaml mongodb: uri: mongodb://localhost:27017 database: mydatabase ``` 然后,创建一个 Repository 类来操作 MongoDB 数据库。在该类中,你可以使用 MongoClient 和 MongoCollection 来查询某一个字段。例如: ```java import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import org.bson.Document; import javax.inject.Singleton; @Singleton public class MyRepository { private final MongoDatabase database; public MyRepository() { MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); database = mongoClient.getDatabase("mydatabase"); } public String findField(String fieldName) { MongoCollection<Document> collection = database.getCollection("mycollection"); MongoCursor<Document> cursor = collection.find().projection(new Document(fieldName, 1)).iterator(); StringBuilder result = new StringBuilder(); while (cursor.hasNext()) { Document document = cursor.next(); result.append(document.get(fieldName)).append("\n"); } return result.toString(); } } ``` 在上面的代码中,我们首先创建了一个 MongoClient 对象,然后通过它获取到指定的数据库。在 `findField` 方法中,我们获取到指定的集合,并使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值