網站首頁 編程語言 正文
.NET?Core利用BsonDocumentProjectionDefinition和Lookup進行?join?關聯查詢(推薦)_實用技巧
作者:Code的那些事 ? 更新時間: 2022-12-04 編程語言前序
前段時間由于項目需要用到MongoDB,但是MongoDB不建議Collection join 查詢,網上很多例子查詢都是基于linq 進行關聯查詢。但是在stackoverflow找到一個例子,程序員的朋友們請善于利用google搜索。主要介紹一個查詢角色的所有用戶的例子。MongoDB創建Collection 和準備數據,請自行處理。
1. 準備實體模型
/// <summary>
/// 用戶實體(Collection)
/// </summary>
public class User
{
public Guid UserId { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public bool IsDelete { get; set; }
public DateTime CreateTime { get; set; }
public Guid RoleId { get; set; }
}
/// <summary>
/// 角色實體(Collection)
/// </summary>
public class Role
{
public Guid RoleId { get; set; }
public string RoleName { get; set; }
public DateTime CreateTime { get; set; }
}
/// <summary>
/// 構建用戶Dto(不在Mongo創建Collection)
/// </summary>
public class UserDto
{
public Guid UserId { get; set; }
public string UserName { get; set; }
public DateTime CreateTime { get; set; }
public Guid RoleId { get; set; }
public string RoleName { get; set; }
}
2 .前置連接Mongo代碼
var client = new MongoClient("xxx");
var database = client.GetDatabase("xxx");
3. 構建BsonDocumentProjectionDefinition
BsonDocumentProjectionDefinition<BsonDocument> projectionDefinition = new BsonDocumentProjectionDefinition<BsonDocument>(
new BsonDocument("UserId", "$UserId")
.Add("UserName", "$UserName")
.Add("CreateTime", "$CreateTime")
.Add("RoleId", "$RoleId")
.Add("RoleName", new BsonDocument("$arrayElemAt", new BsonArray().Add("$Role.RoleName").Add(0)))
);
4.利用 Lookup 進行關聯
Guid roleId = Guid.Empty;
List<UserDto> list = database.GetCollection<BsonDocument>(typeof(User).Name)
.Aggregate()
//過濾條件
.Match(Builders<BsonDocument>.Filter.Eq("IsDelete", false))
.Match(Builders<BsonDocument>.Filter.Eq("RoleId", roleId))
//連接Role
.Lookup(typeof(Role).Name, "RoleId", "RoleId", typeof(UserDto).Name)
//查詢需要顯示的列
.Project(projectionDefinition)
.As<UserDto>().ToList();
原文鏈接:https://www.cnblogs.com/honglinjia/p/16813761.html
相關推薦
- 2022-06-22 深入淺析C/C++?的條件編譯_C 語言
- 2022-06-16 golang?beego框架路由ORM增刪改查完整案例_Golang
- 2023-06-21 Android面向單Activity開發示例解析_Android
- 2022-05-15 Element框架里日期選擇器限制時間,最多選31天
- 2022-12-21 QT+Quick實現自定義組件的示例詳解_C 語言
- 2022-11-15 如何將Android?Studio卸載干凈_Android
- 2023-04-23 Python實現讀取csv文件并進行排序_python
- 2022-10-07 Android實現點擊圖片上傳SQLite數據庫_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支