網(wǎng)站首頁 編程語言 正文
.NET?Core利用BsonDocumentProjectionDefinition和Lookup進(jìn)行?join?關(guān)聯(lián)查詢(推薦)_實(shí)用技巧
作者:Code的那些事 ? 更新時(shí)間: 2022-12-04 編程語言前序
前段時(shí)間由于項(xiàng)目需要用到MongoDB,但是MongoDB不建議Collection join 查詢,網(wǎng)上很多例子查詢都是基于linq 進(jìn)行關(guān)聯(lián)查詢。但是在stackoverflow找到一個(gè)例子,程序員的朋友們請善于利用google搜索。主要介紹一個(gè)查詢角色的所有用戶的例子。MongoDB創(chuàng)建Collection 和準(zhǔn)備數(shù)據(jù),請自行處理。
1. 準(zhǔn)備實(shí)體模型
/// <summary>
/// 用戶實(shí)體(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>
/// 角色實(shí)體(Collection)
/// </summary>
public class Role
{
public Guid RoleId { get; set; }
public string RoleName { get; set; }
public DateTime CreateTime { get; set; }
}
/// <summary>
/// 構(gòu)建用戶Dto(不在Mongo創(chuàng)建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. 構(gòu)建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 進(jìn)行關(guān)聯(lián)
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
相關(guān)推薦
- 2022-04-16 python修改全局變量可以不加global嗎?_python
- 2021-11-08 Linux常用硬盤管理相關(guān)命令介紹_Linux
- 2023-08-01 前端傳遞對象數(shù)組,后端使用list接收并解析
- 2022-03-16 Nginx配置SSL和WSS步驟介紹_nginx
- 2023-01-30 Android實(shí)現(xiàn)RecyclerView嵌套流式布局的詳細(xì)過程_Android
- 2022-07-15 SQL?Server中執(zhí)行動(dòng)態(tài)SQL_MsSql
- 2022-02-02 element icon圖標(biāo)方向旋轉(zhuǎn)
- 2022-04-20 詳細(xì)聊聊sql中exists和not?exists用法_數(shù)據(jù)庫其它
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支