【问题标题】:C# Mongo retrieve sub documentC# Mongo 检索子文档
【发布时间】:2017-06-28 17:33:31
【问题描述】:

我的收藏中有以下文档:

{
    "Target_Year" : 2017,
    "Target_Month" : 6,
    "Performance" : [ 
       {
        "Report_Day": 1,
        "First_Level_Superior" : "WS66",
        "Second_Level_Superior" : "SB23"
    }, 
    {
        "Report_Day": 2,
        "First_Level_Superior" : "CN4",
        "Second_Level_Superior" : "WS66"
    }, 
    {
        "Report_Day": 3,
        "First_Level_Superior" : "",
        "Second_Level_Superior" : "TN27"
    }]
}

以下是我目前的过滤代码:

var builder = Builders<BsonDocument>.Filter;
var filterMain = builder.Eq("Target_Year", "2017") & builder.Eq("Target_Month", "6") & builder.Eq("Performance.Report_Day", "1");
var result = mongoDB.Performance.Find(filterMain).FirstOrDefault();

我实际上需要检索的只是:

    {
        "Report_Day": 1,
        "First_Level_Superior" : "WS66",
        "Second_Level_Superior" : "SB23"
    }

 {
    "Target_Year" : 2017,
    "Target_Month" : 6,
    "Performance" : [ { 
        "Report_Day": 1,
        "First_Level_Superior" : "WS66",
        "Second_Level_Superior" : "SB23"
    }]
}

非常感谢任何帮助。

【问题讨论】:

    标签: c# mongodb


    【解决方案1】:

    您需要添加"projection"positional $ operator 以从查询条件中引用匹配的数组项:

    var builder = Builders<BsonDocument>.Filter;
    var filterMain = builder.Eq("Target_Year", "2017") & builder.Eq("Target_Month", "6") &
        builder.Eq("Performance.Report_Day", "1");
    var project = Builders<BsonDocument>.Projection.Include("Performance.$");
    
    var result = mongoDB.Performance.Find(filterMain).Project(project).FirstOrDefault();
    

    $ 表示在查询表达式中匹配的数组的“索引”:

    builder.Eq("Performance.Report_Day", "1");
    

    【讨论】:

    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多