mongoDB总结记录

前提

最近单位需要用mongoDB存储文档结构的数据,所以学习一波

总结

关于结构动态化的数据

因为没有办法保证结构,所以这次使用MongoDB我没有采用bean的方式进行存储,为了保证动态化结构,添加进文档的时候使其JSON化即可

如何在数组属性中添加内容

如上图,添加lawsList_ContentcollectionName为lawsRegulationsMenu_table

1
2
3
Query query = new Query(Criteria.where("_id").is(id).and("lawsList_Array.lawsListNo").is(lawsListNo));
Update update = Update.update("lawsList_Array.$.lawsList_Content", bean);
mongoTemplate.updateFirst(query, update,"lawsRegulationsMenu_table");

查询嵌套数组的信息

如上图,需要根据lawsList_Array数组中lawsListParentId字段去确定查找范围,并分页

1
2
3
4
5
6
7
Aggregation agg = Aggregation.newAggregation(
Aggregation.unwind("lawsList_Array"),
Aggregation.match(Criteria.where("lawsList_Array.lawsListParentId").is(bean.getLawsListParentId())),
Aggregation.limit(pageSize),
Aggregation.skip((pageNum - 1) * pageSize)
);
List<Map> results = template.aggregate(agg, "lawsRegulationsMenu_table", Map.class).getMappedResults();

嵌套内部更新

1
2
3
4
5
Query query = new Query(Criteria.where("lawsListNo").is(lawsListNo));
Update update = new Update();
update.set("lawsListBeans.lawsListBean2s.$[].lawsListBean3s.$[].lawsListBean4s.$[].lawsListBean5s.$[].lawsListBean6s.$[a].participleContent", participle);
update.filterArray("a.lawsListNo", param.getFlawsListNo());
mongoTemplate.updateFirst(query, update, "lawsRegulationsMenu_table");

根据子节点查出一条完整的链路直到根节点

1
2
3
4
5
6
7
8
9
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.unwind("lawsListBeans"),
Aggregation.unwind("lawsListBeans.lawsListBean2s"),
Aggregation.unwind("lawsListBeans.lawsListBean2s.lawsListBean3s"),
Aggregation.unwind("lawsListBeans.lawsListBean2s.lawsListBean3s.lawsListBean4s"),
Aggregation.unwind("lawsListBeans.lawsListBean2s.lawsListBean3s.lawsListBean4s.lawsListBean5s"), Aggregation.unwind("lawsListBeans.lawsListBean2s.lawsListBean3s.lawsListBean4s.lawsListBean5s.lawsListBean6s"),
Aggregation.match(Criteria.where("lawsListBeans.lawsListBean2s.lawsListBean3s.lawsListBean4s.lawsListBean5s.lawsListBean6s.lawsListNo").is(flawsListNo))
);
List<Map> results = mongoTemplate.aggregate(aggregation, "lawsRegulationsMenu_table", Map.class).getMappedResults();

mongoDB的导入和导出

首先需要从官网下载MongoDB Command Line Database Tools Download导入和导出工具

  • 导出命令
1
2
3
4
./mongoexport -h ip:port -u 账户 -p 密码 -d db库名称 -c 集合名称 --type json -o XXX.json

## 例如
./mongoexport -h 120.27.246.92:16906 -u mongo -p pass -d admin -c lawsRegulationsMenu_table --type json -o lawsRegulationsMenu_table.json
  • 导入命令
1
./mongoimport -h ip:port -u 账户  -p 密码 -d admin -c 集合名称 --type=json --file XXX.json

账号密码设置

1
2
docker exec -it mongo-dev mongo admin
db.createUser({ user:'账号',pwd:'密码',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
赏个🍗吧
0%