首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Spring Data MongoDB @DBRef 如何實現類 SQL JOIN 查詢

     編輯:程式設計疑難解答

場景

文檔結構:

@Document class Order {
    @Id String id;
    @DBRef User user;  // 關聯用戶
    String title;
}
@Document class User {
    @Id String id;
    String name;
}

需查詢訂單並關聯獲取用戶 `name`,類似 SQL `JOIN`。

方案

**MongoDB 不支援原生 JOIN**,Spring Data MongoDB 也不提供自動關聯查詢。常用策略:

  1. 應用層雙查詢:先查訂單列表,收集 `userId`,再 `userRepository.findAllById(ids)`,記憶體中組裝。
  2. 聚合管道 `$lookup`(MongoDB 3.2+):
Aggregation aggregation = Aggregation.newAggregation(
    Aggregation.lookup("user", "user.$id", "_id", "userInfo"),
    Aggregation.unwind("userInfo"),
    Aggregation.project("title", "userInfo.name")
);
AggregationResults<OrderDTO> results = mongoTemplate.aggregate(aggregation, "order", OrderDTO.class);
  1. 冗餘字段:在 Order 中直接存 `userName`,寫入時同步更新,查詢最快。

建議

若關聯查詢頻繁且數據量大,優先考慮 **冗餘字段** 或 **聚合管道**;簡單場景用雙查詢組裝即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved