@Autowired
@Qualifier("mongoTemplate")
private MongoTemplate mongoTemplate;
@Autowired
MongoConverter mongoConverter;
public List<ExportBindingAssetDto> getBounds(String origin, long startDate, long endDate, String queryFieldName, String queryFieldValue, String humanName, String freebieWord, int env) {
MongoTemplate mt = mongoTemplate;
MongoCollection<Document> coll = mt.getCollection("bindings");
List<Document> querys = QueryUtil.queryBindAssets(origin, startDate, endDate, queryFieldName, queryFieldValue, humanName, freebieWord);
AggregateIterable<Document> results = coll.aggregate(querys);
MongoCursor<Document> it = results.iterator();
List<ExportBindingAssetDto> resultList = new ArrayList<>();
try {
while (it.hasNext()) {
ExportBindingAssetDto item = mongoConverter.read(ExportBindingAssetDto.class, it.next());
resultList.add(item);
} finally {
it.close();
return resultList;
类ExportBindingAssetDto.java
- 遗留问题:
1、数据库存储的时间戳是 string 类型的,暂时没有找到怎么用sql语句直接转化成时间格式的方法
2、字符存储长度不定,即前导0(10个连续的0),暂时没有找到怎么用sql语句直接进行判断截取的方法。文中使用的是切割后获取的方法
【mongoDB】 学习(三)java + mongodb 多表联合查询关键字mongoDB、Java、$lookup、 $project、 $match 等1、先介绍这次使用的 mongoDB 内的方法以及使用方式(Robo 3T 1.3.1)mongoDB 官网https://docs.mongodb.com/manual/reference/operator/aggregation/project/index.html(1)$lookup类似SQL server里面的 join"
最近在开发的过程中,一个列表的查询,涉及到了多表的关联查询,由于持久层使用的是mongodb,对这个非关系型数据使用的不是很多,所以在实现此功能的过程中出现了不少问题,现在此做记录,一为加深自己的理解,以后遇到此类问题可以快速的解决,二为遇到同样问题的小伙伴提供一点小小的帮助。
全文分为两部分:
使用robo3t编写多表关系的查询语句
将编写的查询语句整合到java项目
多表联查的查询语句:...
// 两个集合关联
// 小表(HTQH_BROKER_CUST_RELA)做主表
db.getCollection('HTQH_BROKER_CUST_RELA').aggregate([
// 主表的查询条件
{$match: {'BROKER_NUM': {$in: ['DA1831']}}},
$lookup: {
// 大表(D01_CUST_LABEL)做子表
from: 'D01_CUST_L.
db.assets.aggregate([
{$match:{"stationId":"HNRDC"}},
{$match:{"categoryType":"TYPE_FOLDER_COMMON"}},
{$match:{"extraData.folder_used":{$gte:0}}},{
$lookup: {
from: "departs",
localField: "pare...
({"START_TIME":{"$gte":ISODate("2021-08-03 07:59:06"),"$lte":ISODate("2021-09-01 08:30:46")}})
多条件联合查询json格式语法($and拼接多条件,条件之间用 “,”分割):
"$and": [
({"START_TIME":{"$gte":ISODate("2021-08-03 07:59:06"),...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
MongoDB 多表级联查询
设置级联表格
LookupOperation lookup = Aggregation.lookup("关联表", "主表字段", "关联表字段", "关联表别名");
设置查询数据
AggregationOperation match = Aggregation.match(Criteria.where("判断字段").is("判断值"));
设置分页信息
//设置查询字段长度
LimitOperation limit = Aggregation.limit(获取数据大小
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
俩张mongo数据库表进行联查
// java实现'from'后面是副表名,‘loc
好的,以下是一个 MongoDB 的三表连接查询实例:
假设我们有三个集合:users、orders 和 products。users 集合存储用户信息,orders 集合存储订单信息,products 集合存储商品信息。我们需要查询出每个用户的订单信息以及订单中包含的商品信息。
首先,我们需要在 orders 集合中查询每个用户的订单信息,可以使用 $lookup 操作符连接 users 集合和 orders 集合:
db.users.aggregate([
$lookup: {
from: "orders",
localField: "_id",
foreignField: "user_id",
as: "orders"
这个查询会返回一个包含每个用户信息以及他们的订单信息的文档。现在我们需要在每个订单中查询包含的商品信息,可以再次使用 $lookup 操作符连接 products 集合和 orders 集合:
db.users.aggregate([
$lookup: {
from: "orders",
localField: "_id",
foreignField: "user_id",
as: "orders"
$unwind: "$orders"
$lookup: {
from: "products",
localField: "orders.product_id",
foreignField: "_id",
as: "orders.products"
$group: {
_id: "$_id",
name: { $first: "$name" },
orders: { $push: "$orders" }
这个查询会返回一个包含每个用户信息以及他们的订单信息和订单中包含的商品信息的文档。注意,我们使用了 $unwind 操作符将 orders 数组展开,然后再次使用 $lookup 操作符连接 products 集合和 orders 集合。最后,我们使用 $group 操作符将结果按照用户分组。