Mongodb的Java操作

小编 2026-06-09 阅读:642 评论:0
MongoDB中的一条记录就是一个文档(document),里面存储了由字段和值对构成的...

MongoDB中的一条记录就是一个文档(document),里面存储了由字段和值对构成的数据结构。文档看起来很像JSON对象,字段的值可以是数组、其他文档,也可以是文档数组:

{   "_id" : ObjectId("54c955492b7c8eb21818bd09"),   "address" : {      "street" : "2 Avenue",      "zipcode" : "10075",      "building" : "1480",      "coord" : [ -73.9557413, 40.7720266 ],   },   "borough" : "Manhattan",   "cuisine" : "Italian",   "grades" : [      {         "date" : ISODate("2014-10-01T00:00:00Z"),         "grade" : "A",         "score" : 11      },      {         "date" : ISODate("2014-01-16T00:00:00Z"),         "grade" : "B",         "score" : 17      }   ],   "name" : "Vella",   "restaurant_id" : "41704620"}

 

MongoDB将文档存储在集合(collection)中,集合也就是关系型数据库的表。不过和表不一样的是,集合完全不要求内部文档必须模式一致。文档也有主键,而且名称必须是_id。你不提供它就会自动添加。

由于MongoDB的文档格式类似于JSON,所以可以从JSON文件导入数据,只要数据格式合法。比如我们把 https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/dataset.json 的内容保存起来,命名为dbset.json。我们通过下面这条命令导入这些数据到集合restaaurants中:

mongoimport --db test --collection restaurants --drop --file dbset.json

 工具是mongoimport,数据库是test,后面指定了文件源。这个工具的更详细介绍参考 https://docs.mongodb.org/manual/reference/program/mongoimport/#bin.mongoimport 。

 

通过Java操作MongoDB要用到俩jar包:Uber MongoDB Java Driver和BSON,官方给了maven集成方式:

<dependencies>    <dependency>        <groupId>org.mongodb</groupId>        <artifactId>mongo-java-driver</artifactId>        <version>3.0.4</version>    </dependency>    <dependency>        <groupId>org.mongodb</groupId>        <artifactId>bson</artifactId>        <version>3.0.4</version>    </dependency></dependencies>

 但是我尝试了不行,只能自己下载了。

 

访问数据库的方法如下:

MongoClient mongoClient = new MongoClient();MongoDatabase db = mongoClient.getDatabase("test");

 插入数据有四个方法:
Mongodb的Java操作
 我们试一下第三个

DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.CHINA);		Document document = new Document("address",				new Document("street", "avenue 2").append("zipcode", "200000").append("building", "1480").append(						"coord",						Arrays.asList(-73.9557413,								40.7720266)))										.append("borough",												"一个省")										.append("Country", "中国")										.append("grades",												Arrays.asList(new Document()														.append("date", format.parse("2014-10-01T00:00:00Z"))														.append("grade",																"A")														.append("score", 11),												new Document().append("date", format.parse("2014-01-16T00:00:00Z"))														.append("grade", "B").append("score", 17)))						.append("name", "Vella").append("hotel_id", "41704620");		database.getCollection("restaurants").insertOne(document);

 

 之后我们把数据查询一下:

FindIterable<Document> iterable = db.getCollection("restaurants").find();iterable.forEach(new Block<Document>() {    @Override    public void apply(final Document document) {        System.out.println(document);    }});

 可以看到多了一个_id字段。

如果想有针对性的检索,可以传入一个文档:

FindIterable<Document> iterable = db.getCollection("restaurants").find(        new Document("borough", "哈哈哈"));

 (这个匹配失败了所以没有东西返回)

更新数据的方法也比较简单,第一个参数用来检索,第二个是新数据。
Mongodb的Java操作
 比如:

db.getCollection("restaurants").updateOne(new Document("restaurant_id", "41156888"),        new Document("$set", new Document("address.street", "East 31st Street")));

 将会更新address.street。

如果要改的字段太多,可以使用replaceOne
Mongodb的Java操作
 

删除数据使用delete:
Mongodb的Java操作
 比如

db.getCollection("restaurants").deleteMany(new Document("borough", "Manhattan"));

 全部删除的话可以

db.getCollection("restaurants").deleteMany(new Document());

 连集合都不要的话可以

db.getCollection("restaurants").drop();

 最后说一下索引的建立

db.getCollection("restaurants").createIndex(new Document("cuisine", 1));

 使用createIndex,指定为哪个字段键索引,1是升序,-1是降序。

索引相关的方法有这些:
Mongodb的Java操作
 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表