使用C# MongoDB驱动程序查询和投影嵌套数组。

3

你好,我正在尝试学习如何使用C#驱动程序来操作MongoDB数据库。我有一个类似于以下结构的集合:

public class DataSnapshot
{

    [BsonId]
    public ObjectId InternalId { get; set; }
    public Int Id { get; set; }
    public string Identifier1 { get; set; }
    public string Identifier2 { get; set; }
    public List<NestedData> NestedData { get; set; }
}

并且
public class NestedData
{

    public DateTime TimeStamp { get; set; }
    public double Info1 { get; set; }
    public double Info2 { get; set; }

}

嵌套数据可能非常庞大。

我想查询集合以返回在日期范围内的所有嵌套数据列表(理想情况下,连接多个快照中的数据,但只连接一个也是个好的开始)

我正在努力弄清楚如何正确地过滤和映射此数据。我已经阅读了过滤和过滤/投影的示例,但对于所有这些条件,我仍然无法使其正常工作。

我正在尝试做这样的事情:

context.DataSnapshot.Find(x => x.Identifier1 == "foo" && x.Identifier2 == "bar" && x.NestedData.Timestamp > DateTime.Now.AddYears(-1)).Project(x => x.NestedData).ToList();

最好的方法是什么?

谢谢。

1个回答

3
你可以使用LINQ查询:
var q = from doc in col.AsQueryable()
        where doc.Identifier1 == "foo" && doc.Identifier2 == "bar"
        select doc.NestedData
        into nested
        from nestedDoc in nested
        where nestedDoc.TimeStamp > DateTime.Now.AddYears(-1)
        select nestedDoc;

var results = q.ToList();

将被翻译成以下的MongoDB聚合语句:

[
    { 
        "$match" : { 
            "Identifier1" : "foo", 
            "Identifier2" : "bar" 
            } 
        }, 
    { 
        "$project" : { 
            "NestedData" : "$NestedData", 
            "_id" : 0 
        } 
    }, 
    { 
        "$unwind" : "$NestedData" 
    }, 
    { 
        "$project" : { 
            "nested" : "$NestedData", 
            "nestedDoc" : "$NestedData", 
            "_id" : 0 
        } 
    }, 
    { 
        "$match" : { 
            "nestedDoc.TimeStamp" : { 
                "$gt" : ISODate("2019-04-24T23:36:42.519Z") 
            } 
        } 
    }, 
    { 
        "$project" : { 
            "nestedDoc" : "$nestedDoc", 
            "_id" : 0 
        } 
    }
]

所以整个过滤将在数据库中执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接