我的收藏中有以下文档:
{
"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"
}]
}
非常感谢任何帮助。
最佳答案
您需要添加 "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");
关于C# Mongo 检索子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44796830/