1
我們將API引入21世紀,並更新所有查詢以使用更新的(2.4)Mongo C#驅動程序。我們的一個查詢有這個過濾器:使用派生類型的字段進行過濾
Query.Or(
Query<UserPermission>.EQ(p => p.UserId, userId),
Query<GroupPermission>.In(p => p.GroupId, groupIds)
)
UserPermission
和GroupPermission
無論從Permission
繼承。在舊的驅動程序中,這很好,因爲底層代碼只是構建了過濾器文檔,而Mongo繼續快速獲取數據。
有了新的驅動程序,我看是這樣的:
permissionsQueryBuilder.Or(
userPermissionsQueryBuilder.Eq(p => p.UserId, userId),
groupPermissionsQueryBuilder.In(p => p.GroupId, groupIds)
)
不幸的是,這是行不通的,因爲還是希望FilterDefinition<Permission>[]
和兩個查詢元素分別返回FilterDefinition<UserPermission>
和FilterDefinition<GroupPermission>
。
使用新的Mongo驅動程序來處理這個問題的正確方法是什麼?我搜索了Google,但搜索結果似乎主要與_t
有關,以及如何存儲派生類型,而不是如何查詢它們。
在此先感謝。
一個術語nit-pick:我認爲你的意思是「泛型類型」而不是「多態類型」。 – Blorgbeard
@Blorgbeard注意到並更正爲派生類型:) – john