【发布时间】:2011-11-14 22:57:25
【问题描述】:
我正在编写一个应用程序,用户可以在其中编写 json 代码并将该 json 代码与 Id 和 Collection 一起存储。换句话说,它们指定了一个 Id、一个 Collection(字符串;[a-zA-Z0-9])和一个 Data(json,可以是任何有效的 json)。
到目前为止,我一直在使用 RavenDb,因为我认为文档数据库会很完美,但我在查询方面遇到了一些问题。
需要存储和查询的对象之一如下:
{
"network": "some_network",
"names": ["name1","name2"],
"data": {"values":[],"keys":[]}
}
这个对象应该存储一些指定的或自动生成的 ID(如果给定了null)和一个集合(必须始终指定),然后我需要能够根据它进行查询关于集合、网络和单个名称。
例如,我有代码 query('users', '{"network":"some_network","names":"name1"}'),我需要该代码来返回此对象(以及与之匹配的任何其他对象)。
另外,我可以更改数据库,但是数据库需要能够在进程内运行(自托管),并且能够在没有管理员权限的情况下运行而无需安装(换句话说,它可以'不要像 wcf 那样绑定到主机名/IP)。
我怎样才能实现这样的目标?
【问题讨论】:
-
你实际上是在运行这个查询: session.Query
().Where(x => x.network == "some_network" && x.names.Any(y => y = =“名称1”))。我不确定您要做什么,但如果您使用 RavenDB 附带的工具应该没问题。 -
是的,但问题是我在编译时不了解对象图。如前所述,用户制作 json,并且可以按照自己的喜好制作。
-
谁生成查询?如果那是用户,让他使用 Linq。 RavenDB 将在索引方面完成其余的工作。
-
在没有编译类再次使用linq的情况下如何使用linq?
-
Raven 曾经支持将 Linq 查询作为字符串传递,但现在不支持了,抱歉。您可以使用 REST API 并根据用户输入为您构建 UI。本质上,这就是客户端 API Linq 支持所做的 - 查询只是 Lucene 语法。所以:“network:some_network AND names:name1”
标签: c# json ravendb persistent-object-store