MongoDB用法
MongoDB用法
##1. mongoDB存储数据
创建集合Collection -> 对应传统数据库的表table
命令: db.createCollection(name, options)
eg:
db.createCollection("mycol", {capped: true, autoIndexId: true, size: 6142800, max: 10000 })
1. name是集合的名字
2. options为集合的可选参数
● capped 布尔(如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
●autoIndexId 布尔 如为 true,自动在_id字段创建索引。默认为false。
●size 数值 为固定集合指定一个最大值,以千字节计(KB)。如果 capped 为 true,也需要指定该字段。
●max 数值 指定固定集合中包含文档的最大数量。插入文档
命令: db.COLLECTION_NAME.insert(document)
eg:
db.col.insert({
"_id": ObjectId("5dfb71b9f6f3fb2a9e1bfb46"),
"ASPD_ID": "10288094",
"ASPD_Nm": "缘定三生炽热红25g(电子渠道)",
...
"Br_Sell_Prc": "598",
"Can_Bybk_Ind": "0",
"Co_Nm": "紫金矿业集团黄金珠宝有限公司",
"Wght_UnCd": "0702"
})插入文档你也可以使用
db.COLLECTION_NAME.save(document)
命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。即通过传入的文档来替换已有文档.以及:
db.COLLECTION_NAME.insertOne()
:向指定集合中插入一条文档数据db.COLLECTION_NAME.insertMany()
:向指定集合中插入多条文档数据
更新文档
db.COLLECTION_NAME.update(
<query>,
<update>,
{
upsert:,
multi:,
writeConcern:
}
)
eg:
db.COLLECTION_NAME.update(
{'ASPD_Nm':'缘定三生炽热红25g(电子渠道)'},
{$set:{'ASPD_Nm':'缘定三生炽热红25g(线下渠道)'})
- 以上命令就可以实现:
把ASPD_Nm为缘定三生炽热红25g(电子渠道)的数据中的ASPD_Nm字段的内容, 修改为ASPD_Nm':'缘定三生炽热红25g(线下渠道)
1. 参数说明
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
删除文档
db.COLLECTION_NAME.remove(
<query>,
{
justOne:,
writeConcern:
}
)
eg:
db.COLLECTION_NAME.remove({'ASPD_Nm':'缘定三生炽热红25g(电子渠道)'})
参数说明:
query:(可选)删除的文档的条件。
justOne:(可选)如果设为 true或1,则只删除一个文档如果不设置该参数或使用默认值 false则删除所有匹配条件的文档。
writeConcern:(可选)抛出异常的级别。如果想删除所有数据可以使用:
db.col.remove({})
类似于数据库的truncate
查询文档
db.COLLECTION_NAME.find(query, projection)
eg:
db.apsd_data.find({"ASPD_Nm":"缘定三生炽热红25g(电子渠道)", "Co_Nm":"紫金矿业集团黄金珠宝有限公司"}).pretty()
参数说明:
query: 可选,使用查询操作符指定查询条件
projection: 可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
● 可以在查询后追加.pretty()方法使得结果更易读
查询常见的有and与or两种关系.
and查询可以直接在查询语句中 “ , “分隔,
而or则需要使用$or:
db.COLLECTION_NAME.find({
"likes": {$gt:50},
$or: [{"ASPD_Nm":"缘定三生炽热红25g(电子渠道)", "Co_Nm":"紫金矿"}]
}).pretty()
2. java代码查询mongo的数据
postgresql中, 基金/ 保险/ 金条/ 贵金属表都有一个code对应mongo里的一条或多条数据
引依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-mongodbartifactId>
dependency>
dependencies>
- 以基金的详情查询为例:
|
- 结果data的结构(也是mongodb里存储的数据结构)如下所示:
|
如果在查询时排除一些字段, 可以:
//eg: 返回结果过滤_id, Ins_PD_Trl_Cd字段
query.fields().exclude("_id");
query.fields().exclude("Ins_PD_Trl_Cd");
增加一些查询的筛选条件, 可以:
//eg: 只查PM_PD_ID等于贵金属的code的数据
criteria.and("PM_PD_ID").is(metal.getCode());
3. mongo的分页与排序
分页:
分页可以使用默认的skip,limit关键字结合的方式来实现, 适用于中小数据量.
//第一页
db.COLLECTION_NAME.find().limit (10)
//第二页
db.COLLECTION_NAME.find().skip(10).limit(10)
//第三页
db.COLLECTION_NAME.find().skip(20).limit(10)但是在查询时会扫描全表. 然后再返回结果.
解决的方法是: 可以先查出当前页第一条, 然后顺序数pageSize条
排序:
db.students.find({ _id:{ $gt: startValue}}).sort({_id: 1})});
1是升序, -1是降序