如何在RavenDb中查询扁平化子集合?需要索引吗?

全是你的

我在C#Web项目中使用RavenDb。我有一个对象,我需要用每个子对象1行和一些根/父对象属性来查询其子集合。
注意:这不是实际的设计,只是针对此问题进行了简化。

    public class OrderLine
    {
        public string ProductName { get; set; }
        public int Quantity { get; set; }
        public DateTime? ShipDate { get; set; }
    }
    public class Order
    {
        public int OrderId { get; set; }
        public string CustomerName { get; set; }
        public DateTime OrderDate { get; set; }
        public List<OrderLine> OrderLines { get; set; }

    }

带有订单行的订单是一个文档。因为并非所有产品都总是有库存,所以ShipDate将在每条生产线上更新。

我需要能够创建包含以下各列的最近10种产品的列表:

OrderId
Customer
ProductName
ShipDate

这不起作用,因为不支持SelectMany:

        var query = from helper in RavenSession.Query<Order>()
                        .SelectMany(l => l.OrderLines, (order, orderline) => 
                            new { order, orderline })
                    select new 
                    {
                        helper.order.OrderId,
                        helper.order.CustomerName,
                        helper.orderline.ProductName,
                        helper.orderline.ShipDate

                    };
        var result = query.Where(x => x.ShipDate.HasValue)
            .OrderByDescending(x => x.ShipDate.Value).Take(10);

我相信正确的做法是创建一个可以使列表变平的索引,但是我没有取得任何成功。我不认为Map-Reduce的情况会奏效,因为据我所知,它将有效地进行分组,从而将文档数减少到更少的行(在索引中)。但是在这种情况下,我试图将文档数量扩展到更多行(在索引中)。

我不想将每个OrderLine放在单独的文档中,但是我不知道我的选择是什么。

马特·约翰逊·品特

由于要对子类中的字段进行过滤和排序,因此需要确保所有需要的字段都已索引并存储

public class ShippedItemsIndex
    : AbstractIndexCreationTask<Order, ShippedItemsIndex.Result>
{
    public class Result
    {
        public int OrderId { get; set; }
        public string CustomerName { get; set; }
        public string ProductName { get; set; }
        public int Quantity { get; set; }
        public DateTime ShipDate { get; set; }
    }

    public ShippedItemsIndex()
    {
        Map = orders => 
            from order in orders
            from line in order.OrderLines
            where line.ShipDate != null
            select new
            {
                order.OrderId,
                order.CustomerName,
                line.ProductName,
                line.Quantity,
                line.ShipDate
            };

        StoreAllFields(FieldStorage.Yes);
    }
}

然后,您可以从索引投影到结果中。

var query = session.Query<Order, ShippedItemsIndex>()
    .ProjectFromIndexFieldsInto<ShippedItemsIndex.Result>()
    .OrderByDescending(x => x.ShipDate)
    .Take(10);

var results = query.ToList();

这是一个完整的测试演示。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Any的LINQ RavenDB子集合查询不能在查询中包含非索引变量

来自分类Dev

RavenDB 查询子集合多态性

来自分类Dev

如何在LINQ中按子集合值选择

来自分类Dev

如何在Nhibernate中对子集合执行QueryOver

来自分类Dev

在子集合Firestore中查询文档

来自分类Dev

如何在IntelliJ中停止扁平API的扁平化

来自分类Dev

Firestore 子集合 '!=' 查询

来自分类Dev

对Firestore子集合中的文档进行通配符查询

来自分类Dev

mongodb查询聚合组中的子集合计数

来自分类Dev

在RavenDB索引中查询单独的集合(WHERE IN)

来自分类Dev

文档会在Firestore中读取计数子集合吗?

来自分类Dev

如何在RDD中扁平化列表?

来自分类Dev

如何在python中扁平化列表?

来自分类Dev

如何在React-native中从Firestore中读取子集合的文档字段

来自分类Dev

子集合中的总和

来自分类Dev

如何在Entity Framework Code First中在子集合上创建表达式

来自分类Dev

如何在Firestore / Flutter中获取子集合和文档

来自分类Dev

如何在 Firestore 中获取子集合引用 [Node JS]

来自分类Dev

如何从文档中检索未知子集合

来自分类Dev

如何根据子集合中的值选择对象?

来自分类Dev

如何按子集合中的项目执行搜索文档

来自分类Dev

如何访问 angular 和 firestore 中的子集合

来自分类Dev

Firestore查询文档的子集合

来自分类Dev

Firestore / Flutter:查询文档的子集合

来自分类Dev

带子集合的Firebase查询

来自分类Dev

Firestore从哪里查询获取子集合

来自分类Dev

查询不返回子集合

来自分类Dev

Firestore集合组查询-如何订购子集合所属的父文档?

来自分类Dev

我可以使用 firestoreConnect 跨子集合查询吗?

Related 相关文章

热门标签

归档