0

希望这是一个简单的方法,但不确定它是否会像网上的信息表明您在不使用强类型模型的情况下无法查询。

为了给场景提供一些背景知识,我有一个客户端 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 文档上并发送回客户端。那么有没有什么方法可以读取数据而不必使用强类型呢?所以我可以验证写入并在那里使用强类型模型,但是在提取数据时我只想查询原始 BSON?

希望这是有道理的,即使它是冗长的,只是想给出上下文以避免“你为什么不能使用强类型模型?” 等等

4

1 回答 1

1

因此,您可以使用原始 BsonDocuments 进行查询。这些是无类型的,但可以使用类型化模型创建。也许这是一种妥协?

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

否则,如果您打算让您的版本以这种方式工作,则没有神奇的子弹来处理模式迁移。这是所有数据库堆栈的问题。我们在序列化教程中编写了一些文档来处理它。

于 2012-12-17T15:26:13.947 回答