我正在考虑使用我的域模型 (DDD) 作为 RavenDb 中的文档。这是一个坏主意吗?
如果没有,我正在使用TodoListId包含id 的 id 类(如)(在乌鸦的情况下todolists/3等)。我如何告诉 Raven/JSON.NET 将它们用作 ID?
public class TodoListId
{
public class TodoListId(string id)
{
//validate the id and set internal var
}
//override ToString to return the id
}
public class TodoList
{
public TodoList(TodoListId id)
{}
public TodoListId Id{get;set;}
public TodoListId Parent {get;set;}
public string SomeBasicProperty {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
此外,当我使用 nhibernate 时,我通常将所有 setter 设置为 protected 以确保正确使用域模型。RavenDb 客户端也可以这样做吗?或者不会序列化工作呢?
todoList.Id.ToString()会回来todolists/1。
根据Ayende的这篇文章,我创建了以下索引定义
public class ProductsSearch : AbstractIndexCreationTask<Product, ProductsSearch.Result>
{
public class Result
{
public string Query { get; set; }
}
public ProductsSearch()
{
Map = products => from product in products
select new
{
Query = new object[]
{
product.Title,
product.Tags.Select(tag => tag.Name),
product.Tags.SelectMany(tag => tag.Aliases, (tag, alias) => alias.Name)
}
};
Index(x => x.Query, FieldIndexing.Analyzed);
}
}
Run Code Online (Sandbox Code Playgroud)
一个区别是我必须使用SelectMany语句来获取标记的别名.标签可以有多个别名(即标签:鼠标别名:指点设备)
我不知道为什么SelectMany行会破坏索引.如果我删除它,索引工作.
有没有办法在属性上放置一个属性来告诉 RavenDB 像 ID 属性一样使用这个属性并在它上面放置一个自动增量?
伪代码:
public class MyObj {
public string Id { get; set; }
[Increment]
public int OtherProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我需要检索存在于数据库中的所有RavenDB集合名称.有没有办法做到这一点?怎么样?
我正在尝试安装RavenDB以作为Windows服务运行.默认情况下,它将自己设置为在本地系统帐户下运行,因此我尝试通过在专用帐户下运行来降低安全风险.我已经为程序目录c:\ Program Files\RavenDB和数据目录d:\ Data\RavenDB授予了对文件系统的完全访问权限.但是,当我尝试启动服务时,它立即失败,我在事件日志中收到以下错误:
RavenDB service failed to start because of an error
System.Net.HttpListenerException (0x80004005): Access is denied
at System.Net.HttpListener.AddAllPrefixes()
at System.Net.HttpListener.Start()
at Raven.Database.Server.HttpServer.StartListening() in c:\Builds\RavenDB-Stable\Raven.Database\Server\HttpServer.cs:line 350
at Raven.Server.RavenDbServer..ctor(RavenConfiguration settings) in c:\Builds\RavenDB-Stable\Raven.Server\RavenDbServer.cs:line 43
at Raven.Server.RavenService.<OnStart>b__0() in c:\Builds\RavenDB-Stable\Raven.Server\RavenService.cs:line 37
Run Code Online (Sandbox Code Playgroud)
那么,如何配置用户运行RavenDB?我需要授予哪些权限?我已经检查了RavenDB文档和论坛,但没有在任何地方看到这个问题.
为了在RavenDB查询中使用和执行转换器,我得到了一些奇怪的行为.
假设一个课程Member,这个课程相当漫长而冗长......
class Member {
// ...
// Lots of properties, methods
}
Run Code Online (Sandbox Code Playgroud)
我只想获得更轻量级的结果.所以我宣布一个较小的班级.
public class MiniMember {
public string Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并试图用它来查询它AbstractTransformerCreationTask<T>.
public class MemberByNameList : AbstractTransformerCreationTask<Member> {
public MemberByNameList() {
TransformResults = members => from member in members
select new MiniMember {
Id = member.Id,
Name = member.Name
};
}
}
Run Code Online (Sandbox Code Playgroud)
这在服务器端Studio UI上工作正常,但是当我尝试在我的.NET代码中执行此操作时,我遇到了问题.
var members = DocumentSession
.Query<Member>()
.TransformWith<Indexes.MemberByNameList, …Run Code Online (Sandbox Code Playgroud) 我们在服务器上部署了Raven,我们的.NET代码可以正常使用它.
当远程控制到盒子上时,我希望能够通过HTTP客户端对Raven进行HTTP调用.
我可以在Raven工作室看到我在一个名为'Locations'的集合中有一个文件,其ID为'locations/1'.Raven正在端口9999上运行,因此在我的HTTP客户端(Postman for Chrome)中,我输入以下GET请求:
http://localhost:9999/docs/locations/1
Run Code Online (Sandbox Code Playgroud)
但是,我总是得到404.
如果我使URL格式错误(例如,通过将'docs'段更改为'documents'),我会收到Raven的回复,告诉我它不知道如何处理请求,所以我必须在正确的位置.Raven似乎告诉我文件不在那里,当我知道它的时候.
有人能提供一些见解吗?
我想防止在我的项目中删除文档,我决定使用元数据将文档标记为已存档。我用下面的代码来做到这一点:
public class DeleteDocumentListener : IDocumentDeleteListener
{
public void BeforeDelete(string key, object entityInstance, RavenJObject metadata)
{
metadata.Add("Archived", true);
throw new NotSupportedException();
}
}
Run Code Online (Sandbox Code Playgroud)
之后,我想更改查询以仅返回存档元数据值设置为 false 的文档:
using (var session = _store.OpenSession())
{
var query = session.Advanced.DocumentQuery<Cutter>()
.WhereEquals("@metadata.Archived", false);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,此查询返回空结果集。如果 Document 没有此元数据属性,则上述条件将被视为 false。这不是我所期望的。
如何编写查询以返回没有元数据属性或此属性具有某些值的文档?
我已经在谷歌云的 3 节点集群上部署了 ravendb。但是它不能从浏览器访问。这是我遵循的程序和配置。你能帮我解决服务和部署问题吗?当我运行 get pods 和 get svc 命令时,pods 和服务正在运行,但无法从浏览器访问数据库。
程序如下:
I suggest you first run the setup wizard on your local dev machine and get the Let's Encrypt certificate. Just use 127.0.0.1:8080 as the IP, it's not important at the moment.
(Even better will be to get your own domain + certificate for production use)
You need to convert both the pfx file and the license.json file to base64, In c# for example:
Convert.ToBase64String(File.ReadAllBytes(@"C:\work\certs\cluster.server.certificate.iftah.pfx"))
Convert.ToBase64String(File.ReadAllBytes(@"C:\work\license.json"))
1. Create a …Run Code Online (Sandbox Code Playgroud) ravendb ravenhq kubernetes google-kubernetes-engine kubernetes-ingress
我正在为求平均列的正确语法而苦苦挣扎。我所拥有的 - 来自 RavenDB Studio 编辑器:
地图:
from area in docs.Level5_AdministrativeAreas
select new
{
area.NAME_4,
totalPrice = area.pricePerSquareMetre,
areaCount = 1,
priceAverage = 0
}
Run Code Online (Sandbox Code Playgroud)
降低:
from result in results
group result by new { result.NAME_4 } into g
select new
{
NAME_4 = g.Key.NAME_4,
totalPrice = g.Sum(x => x.totalPrice),
areaCount = g.Sum(x => x.areaCount),
priceAverage = totalPrice / areaCount
}
Run Code Online (Sandbox Code Playgroud)
计数和总价计算正确,但我不知道如何引用totalPrice和areaCount。
是否需要额外的选择块?我试过“g.totalPrice”和“g.priceAverage”,但它没有被识别。
感谢您的帮助 !
ravendb ×10
c# ×2
average ×1
collections ×1
document ×1
kubernetes ×1
metadata ×1
nosql ×1
ravendb-http ×1
ravenhq ×1
reduce ×1