2

我正在编写一个应用程序,用户可以在其中编写 json 代码并将该 json 代码与 Id 和 Collection 一起存储。换句话说,它们指定了一个 ID、一个集合(字符串;[a-zA-Z0-9])和一个数据(json,可以是任何有效的 json)。

到目前为止,我一直在使用 RavenDb,因为我认为文档数据库是完美的,但我在查询方面遇到了一些问题。

需要存储和查询的对象之一如下:

{
    "network": "some_network",
    "names": ["name1","name2"],
    "data": {"values":[],"keys":[]}
}

这个对象应该与一些指定的或自动生成的(如果null给定的)和一个集合(必须始终指定)一起存储,然后我需要能够根据集合、网络和一个单名。

例如,我有代码query('users', '{"network":"some_network","names":"name1"}'),我需要该代码来返回这个对象(以及与之匹配的任何其他对象)。

另外,我可以更改数据库,但是数据库需要能够在进程内运行(自托管),并且能够在没有管理员权限的情况下运行而无需安装(换句话说,它不能绑定像 wcf 一样到主机名/IP)。

我怎样才能实现这样的目标?

4

1 回答 1

4

我找到了答案:

    public string Query(string dynIndexName, string query)
    {
        using (var session = store.OpenSession())
        {
            var q = new IndexQuery();
            q.Query = query;
            var result = session.Advanced.DatabaseCommands.Query("dynamic/" + dynIndexName, q, new string[0]);
            return "[" + String.Join(",", result.Results.Select(r => r.ToString())) + "]";
        }
    }

在调用 Query-method 之前,我将 json-query-object 转换为如下所示的 Lucene-query:,(network:"some_network" AND names:"name1")并将其用作数据库的查询参数。存储和检索的整个类可以在这里找到:https ://github.com/Alxandr/RunJS/blob/master/src/AddIns/Storage/StorageMbro.cs

于 2011-10-06T06:38:07.660 回答