- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 RavenDB 解决此问题时遇到困难。我有这些类(class)。为了使示例简单,我从它们中排除了许多属性。
public class Menu
{
public string Name { get; set; }
public List<NavigationNode> Nodes { get; set; }
}
public class NavigationNode
{
public string Text { get; set; }
public Guid? PageId { get; set; }
public string NodeType { get; set; }
public List<NavigationNode> Nodes { get; set; }
}
public class Page
{
public Guid PageId { get; set; }
public string Slug { get; set; }
}
正如您所看到的,这是关于渲染导航菜单的。节点列表是分层的,理论上可以无限深入(当然实际上只有 2-4 个子级别)。起初,我将 Slug 存储在节点中,但意识到,如果页面 Slug 更改,会发生什么情况,当页面更改 slug 时更改所有节点,我必须循环遍历所有菜单,沿着层次结构向下爬,找到所有要更改的 Slug 值他们,这听起来不像是一个最佳解决方案。
所以我认为应该可以构建一个索引,将 Page Slug 与来自节点的其余数据以分层结构结合起来。
我一直在阅读有关 MapReduce、Multimap 和 recurse 的内容,但我什至不知道从哪里开始。
我找到了这个http://ravendb.net/docs/2.0/client-api/querying/static-indexes/indexing-hierarchies
这是一个简单的例子,我只是试图开始一些事情,但我什至无法让它工作,因为我真的不理解上面链接到的页面上的示例。
public class NavigationIndex : AbstractIndexCreationTask<Menu>
{
public NavigationIndex()
{
Map = menus => from menu in menus
from node in Recurse(menu, x => x.Nodes)
select new
{
WhatIsThis = node // <- Why is this a collection?
};
}
}
根据示例,节点不应该是集合,而是实际的 NavigationNode 对象。
是否有可能在 RavenDB 中实现我想要的以及我在示例中做错了什么?
如有任何疑问,请随时提出。
对于造成的困惑,我深表歉意。我会尽力解释一下。
编辑:
将 PageId 更改为字符串不会有问题。我正在使用 Guid,因为我需要能够在插入之前生成主键 ID:s。不管怎样,我想从索引中查询的是包含页面 Slug 的导航链接的分层树。所以我可以在网站上递归地循环出一个导航菜单。
马特·约翰逊问题的回答:
我只想按菜单名称查询
公共(public)类NavigationIndexItem{ 公共(public)字符串菜单名称{获取;放; } 公共(public)字符串文本{获取;放; } 公共(public)字符串 Slug { 获取;放; } 公共(public)字符串 NodeType { 获取;放; } 公共(public)列表子项{获取;放; } }
现在,当我看到上面的类(class)时,我想我可能走错了路。
但无论如何,我会做一些小的改变,并感谢马特的回答。但是我仍然遇到与以前相同的问题。
示例中的这一行:其中 node.PageId != null
node 不是特定 NavigationNode 的实例,而是另一个集合,因此我无法检查其上的 PageId 属性。我只获得 LINQ 扩展的列表。
最佳答案
我正在对你想要的进行一些假设。请参阅我对原始问题的评论。但我认为这就是你所追求的。
首先 - 您需要将 Page
类的 id 更改为 Id
而不是 PageId
。这样 Raven 就会使用您的 guid 作为其文档 ID 的一部分。实际上,使用字符串 Id 会更好,但这仍然有效。
然后您可以执行以下操作:
public class NavigationIndex : AbstractIndexCreationTask<Menu>
{
public NavigationIndex()
{
Map = menus => from menu in menus
from node in Recurse(menu, x => x.Nodes)
where node.PageId != null
let page = LoadDocument<Page>("pages/" + node.PageId)
select new
{
menu.Name,
node.Text,
node.PageId,
page.Slug
};
}
}
这使用新的 LoadDocument RavenDB 2.0的特性,比multi-map更适合你的场景。
关于recursion - RavenDB 和分层文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14606548/
我正在玩Raven DB几天,我想将其用作Web聊天应用程序的存储。我有包含一些用户数据和聊天记录的文档-这是大集合的聊天消息。 每次加载用户文档时,聊天记录也会加载,即使我只需要几个字段,例如:用户
我的实体是: class Resource { string Name; string EmployeeId; } 如何查询多名员工的资源?我尝试了这个: Resource[] Fin
我知道这篇文章的标题会让一些人感到畏缩。我自 2011 年 12 月以来一直在使用 RavenDB,并且逐渐意识到我以不适合使用文档数据库的方式对数据进行建模。首先,我完全明白这一点。其次,考虑到我目
考虑 2 个查询: var test1 = store.OpenSession().Query().Where(x => x.Id == 1).ToList(); var test2 =
我正在运行 RavenDB.Client 2.0.2173-Unstable。我正在创建一个 Multi-Tenancy 系统,作为我注册过程的一部分,我想创建一个新的 Raven 数据库。 我有三行
我正在使用在 Visual Studio 2010 中通过 NuGet 安装的嵌入式 RavenDB => RavenDB-Embedded.1.0.499 包。它正在我阅读完这篇优秀文章后开始的当前
我们在 AWS 上有一个带有集群 RavenDB 服务器 (5.23) 的 DotNet Core API (C#)。创建文档时,Id 具有不同的格式,具体取决于客户端。如果使用 Swagger/Po
我想知道取回搜索记录总数的最佳方法是什么,同时取回第 N 个 128 记录块数据段,这似乎是 RavenDb 运行时强加的上限。 例如给定这个查询,我还需要知道记录的总数。 var bookmarks
我使用的是 RavenDB 2.0.3.0 版。连接调试器后,涉及 RavenDB 的所有内容都运行得非常缓慢。每个查询需要几秒钟才能完成。 如果我在调试器坐在那里时按下暂停键,我总是看到它挂断了以下
我使用以下代码从 RavenDB 中删除文档。在 Raven UI 的底部,我可以看到文档数量从 3,000,000 减少到 2,000,000。但是“数据”文件的大小不会缩小。它总是大约100G。
我想在我的 Raven DB 中轮询新文档。推荐的方法是什么?我可以使用 IndexTimestamp 还是可以依赖文档的顺序? 我想我想分两步完成: 1.检查是否有新的东西,如果有: 1.1。获取最
我已经更改了我的数据模型,并且需要将所有对象的属性更改为 null,因为在我的模型更改后反序列化它们会引发异常。 我猜我可以为每个文档发布一个补丁,但我找不到任何方法来做到这一点,修补某种类型的每个文
有没有办法在进行空间搜索时从 RavenDB 获取距离计算值。我尝试转换建议的 _ = SpatialIndex.Generate(r.Latitude, r.Longitude) 至 距离 = Sp
是否有一种明智的方法来 stub /模拟调用 IDocumentSession.Query() 的结果? ? 我有一个命令,我想验证在对象上调用了方法(即正在测试的“单元”是命令,而不是命令编排的对象
我想在存储在 RavenDB 文档数据库中的两个实体之间有一个引用。由于这不是关系数据库,我知道我应该使用 RavenDBs 文档中描述的非规范化引用技术。虽然起初这看起来不错,但一旦我开始创建一个真
是否可以使用返回单个文档但不是关键的属性从数据存储加载(而不是查询)文档? 在我的场景中,我有用户和品牌。品牌是用户,但用户不一定是品牌。每个品牌都有一个 UserId 属性及其 Id。有没有办法通过
通过官方 RavenDB 阅读一个简单的问题 documentation ,我知道您可以使用客户端 API 函数执行这些操作,但不能使用 RQL,或者无论如何都可以使用 RQL 执行。 最佳答案 您正
我正尝试在 RavenDB 中检索我按 int 列表排序的文档。 Queryable = Queryable.OrderBy(dto => SearchIds.IndexOf(dto.Property
我刚刚让 RavenDB 开始工作。 我意识到我必须启动 RavenDB\packages\RavenDB.1.0.573\server.exe 才能通过以下方式在我的应用程序中访问它: Do
RavenDB 是否有众所周知的做法来检查 RavenDb 的可用性或检查它在任何给定时间的过载程度?我研究了一些 ravendb API 服务。好像没找到关于健康监测的。有没有像官方的 ravend
我是一名优秀的程序员,十分优秀!