簡體   English   中英

C#MongoDb查詢和使用底層JSON

[英]C# MongoDb querying and using underlying JSON

希望這是一個簡單的例子,但不確定是否會因為在線信息似乎表明您不使用強類型模型就無法進行查詢。

為了給場景提供一些背景知識,我有一個客戶端javascript應用程序,該應用程序在本地創建和存儲模型(本地存儲)。 但是,有一個Web服務(ASP MVC)可以通過授權用戶發送模型,它將對其進行驗證並將其持久化。

現在的問題是,隨着客戶端應用程序的更新,模型趨向於更改,可以將其視為數據庫遷移腳本,但是帶有模型。 但是,它們都具有版本和遷移腳本,因此系統將允許加載保存的(客戶端)舊模型,然后將其更新為最新版本並重新保存。

因此,客戶端可以很好地處理不同的版本模型,並且確保您都想知道mongodb / c#問題在哪里,所以來了。

在服務器端,驗證條件始終與給定時間的模型最新版本相對。 因此,如果最新的客戶端模型版本為2.3,則服務器端將相同,並且將對其進行正確驗證。

因此,在這一點上,可以說我將客戶端模型保存為版本3.1,服務器會驗證版本3.1並將其持久保存到MongoDB。 然后我離開了一年,當我返回客戶端版本為5.1時,我已經格式化了計算機,因此不再擁有本地數據,因此我去下載它,但是5.1模型與版本3.1。 服務器不具備遷移數據的能力,但是我們知道在將數據輸入數據庫時​​它是有效的,因此沒有理由不能將數據庫中的JSON發送給客戶端,然后在出現以下情況時將其自動遷移將其加載到內存中(然后在客戶端上重新保存)。 現在,由於服務器模型代表的是最新版本(5.1),我想它要么例外,要么只填寫它可以做的,並默認模型中的其余變量。 (客戶端可以更新服務器模型,以便可以通過客戶端更新服務器模型,以防萬一您擔心數據總是過時。)

因此,由於所有查詢都針對我知道永遠不會更改的2個字段(AccountId,PersistedId),因此我看不到沒有沒有強類型對象就無法檢索MongoDB對象以獲取原始BSON文檔的任何原因,然后調用ToJson( )並發送回客戶端。 那么有什么方法可以不必使用強類型來讀取數據嗎? 因此,我可以驗證寫入並在那里使用強類型模型,但是在提取數據時,我只想查詢原始BSON?

希望即使繞了很長一段時間,這也是有道理的,只是想提供上下文以避免“為什么不能使用強類型模型?” 等等

因此,您可以使用原始BsonDocuments進行查詢。 這些是無類型的,但是可以使用有類型的模型來創建。 也許這是一個折衷方案?

var queryDocument = Query<Person>.Eq(p => p.Name, "Jack");
// { "name" : "Jack" }

否則,如果您打算以這種方式運行版本,則沒有神奇的方法來處理模式遷移。 這是所有數據庫堆棧中的問題。 序列化教程中,我們有一些用於處理它的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM