在MongoDB中使用文档属性过滤器获取嵌入数组的扁平文档数组

伯滕vdb

我有一个MongoDb文档集合,每个文档包含一组嵌入式文档。我想检索其date属性在给定日期之前的那些嵌入式文档的拼合列表。

假设我们有以下类:

public class RootItem
{
    public string Id { get; set; }
    public string Name{ get; set; }
    public string PictureUrl { get; set; }
    public List<Reservation> Reservations { get; set; }
}

public class Reservation
{
    public string Name { get; set; }
    public DateTime Date{ get; set; }
    public int NrOfSeats { get; set; }
}

因此,集合看起来像这样:

{
  "_id": "5be2bb2fdfd6174938518af2",
  "name": "John Doe",
  "pictureUrl": "http://example.com/abc.jpg",
  "reservations": [
    {
      "table": "abc",
      "date": "1/1/2019",
      "nrOfSeats": 5
    },
    {
      "name": "xyz",
      "date": "7/1/2019",
      "nrOfSeats": 5
    }
  ]
}

我已经阅读了文档,在SO上也读了很多,但是到目前为止我得到的最接近的是:

var reservations = Collection
            .Aggregate()
            .Unwind<RootItem, Reservation>(x => x.Reservations)
            .ToList()
            .FindAll(r => r.Date > thresholdDate);

运行此代码,我收到此错误:

System.FormatException:'元素'_id'与类'Reservation'的任何字段或属性都不匹配

因此,我添加了一个投影。如果仅排除_id字段则会得到:

“元素”已创建”与“预订”类的任何字段或属性都不匹配

因此,我手动添加了其他字段(应该没有必要):

var reservations = Collection
            .Aggregate()
            .Unwind<RootItem, Reservation>(x => x.Reservations)
            .Project<Reservation>(Builders<Reservation>.Projection
                 .Exclude("_id")
                 .Include(r => r.Name)
                 .Include(r => r.Date)
                 .Include(r => r.NrOfSeats))
            .ToList()
            .FindAll(r => r.Date > thresholdDate);

但是现在我得到一个列表,其中NrOfSeats的名称设置为null,日期设置为1/1/0001。

如何检索其集合中date属性早于/小于给定日期的所有预订的扁平化列表?

哈维尔·马德里

我想如果你用

collection.AsQueryable().SelectMany(s => s.Reservations).Where(r => r.Date > thresholdDate).ToList();

它应该返回您的期望。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MongoDB文档中的过滤器数组

mongodb嵌套文档的过滤器数组

集合的每个文档中的MongoDB过滤器数组字段

来自子文档数组的mongodb过滤器

MongoDB Python MongoEngine - 通过嵌入式文档过滤器属性的过滤器返回文档

使用过滤器和选项在PHP MongoDB中查询文档的数组字段

MongoDB嵌入式文档的区别和过滤器

如何在MongoDB中使用数组获取嵌入式文档(使用Mongoose)

如何在 MongoDB 中使用数组嵌套过滤器获取特定字段值?

在4个嵌套数组中使用mongodb过滤器,并获取brother结果

获取 mongodb 中数组项的总数,其中数组嵌入到文档中的其他属性中

MongoDB嵌入式文档数组:仅获取一个具有特定属性的嵌入式文档

如何使用 Java 只从匹配特定过滤器的 MongoDB 文档中获取

MongoDB使用过滤器获取N个最新文档

Mongodb 使用过滤器查找文档

在过滤器函数 React 中使用对象数组时获取空数组

用过滤器查询子文档数组并用猫鼬返回原始文档

如何使用不同的更新文档为不同的数组过滤器更新数组中的元素

Mongodb聚合与猫鼬过滤器嵌入式文档

按与过滤器匹配的数组的最后一个元素中的值对文档进行排序。Mongodb

将SVG过滤器嵌入HTML文档中

通过传递过滤器数组来更新查询来更新多个文档中的数组

猫鼬:使用子文档过滤器查找文档

如何使用 Java 驱动程序在 MongoDB 中获取嵌入文档数组的特定值

在javascript中使用过滤器方法时从数组中获取所有值

使用Presto查询MongoDB嵌入式/嵌套文档的数组

如何在Android上使用whereArrayContains()过滤器查询Firestore集合中包含对象数组的文档?

在自定义过滤器中使用数组

在页面过滤器中使用数组变量