MongoDb 3.0 C#更新子文档的子文档
MongoDb 3.0 C# updating subdocument of subdocument
下面是我的文档示例。我正在尝试根据 CostReportingPeriods 元素的 ID 更新 CostReports 部分。
{
"_id" : "240106",
"CostReportingPeriods" : [
{
"FyBgnDt" : ISODate("2000-01-01T05:00:00.000Z"),
"FyEndDt" : ISODate("2000-12-31T05:00:00.000Z"),
"_id" : "240106-20000101-20001231",
"CostReports" : []
},
{
"FyBgnDt" : ISODate("2001-01-01T05:00:00.000Z"),
"FyEndDt" : ISODate("2001-12-31T05:00:00.000Z"),
"_id" : "240106-20010101-20011231",
"CostReports" : []
},
{
"FyBgnDt" : ISODate("2002-01-01T05:00:00.000Z"),
"FyEndDt" : ISODate("2002-12-31T05:00:00.000Z"),
"_id" : "240106-20020101-20021231",
"CostReports" : []
},
{
"FyBgnDt" : ISODate("2003-01-01T05:00:00.000Z"),
"FyEndDt" : ISODate("2003-12-31T05:00:00.000Z"),
"_id" : "240106-20030101-20031231",
"CostReports" : []
}
]
我正在使用以下代码尝试更新该元素,但收到一条错误消息,指出无法使用该元素(CostReportingPeriods.CostReports 的 CostReportingPeriods)遍历该元素。如果我添加 CostReportingPeriods。0.CostReports 它会将其添加到数组的第一个元素,而不管过滤器如何。
var builder = Builders<MongoModels.Provider>.Filter;
var filter = builder.Eq("_id",costReport.PRVDR_NUM) & builder.Eq("CostReportingPeriods._id", costReport.UNIQUE_ID);
var update = Builders<MongoModels.Provider>.Update.AddToSet("CostReportingPeriods.CostReports", Mapper.Map<CostReport, MongoModels.CostReport>(costReport, opt =>
{
opt.AfterMap((src, dest) => dest.Worksheets = CreateWorksheets(dest.RptRecNum).ToList());
}));
如何让它根据子文档的 id 更新我希望它更新的元素?
在尝试了很多不同的东西之后,通过将我的更新过滤器从 "CostReportingPeriods.CostReports" 更改为 "CostReportingPeriods.$.CostReports",它完美地工作了。
下面是我的文档示例。我正在尝试根据 CostReportingPeriods 元素的 ID 更新 CostReports 部分。
{
"_id" : "240106",
"CostReportingPeriods" : [
{
"FyBgnDt" : ISODate("2000-01-01T05:00:00.000Z"),
"FyEndDt" : ISODate("2000-12-31T05:00:00.000Z"),
"_id" : "240106-20000101-20001231",
"CostReports" : []
},
{
"FyBgnDt" : ISODate("2001-01-01T05:00:00.000Z"),
"FyEndDt" : ISODate("2001-12-31T05:00:00.000Z"),
"_id" : "240106-20010101-20011231",
"CostReports" : []
},
{
"FyBgnDt" : ISODate("2002-01-01T05:00:00.000Z"),
"FyEndDt" : ISODate("2002-12-31T05:00:00.000Z"),
"_id" : "240106-20020101-20021231",
"CostReports" : []
},
{
"FyBgnDt" : ISODate("2003-01-01T05:00:00.000Z"),
"FyEndDt" : ISODate("2003-12-31T05:00:00.000Z"),
"_id" : "240106-20030101-20031231",
"CostReports" : []
}
]
我正在使用以下代码尝试更新该元素,但收到一条错误消息,指出无法使用该元素(CostReportingPeriods.CostReports 的 CostReportingPeriods)遍历该元素。如果我添加 CostReportingPeriods。0.CostReports 它会将其添加到数组的第一个元素,而不管过滤器如何。
var builder = Builders<MongoModels.Provider>.Filter;
var filter = builder.Eq("_id",costReport.PRVDR_NUM) & builder.Eq("CostReportingPeriods._id", costReport.UNIQUE_ID);
var update = Builders<MongoModels.Provider>.Update.AddToSet("CostReportingPeriods.CostReports", Mapper.Map<CostReport, MongoModels.CostReport>(costReport, opt =>
{
opt.AfterMap((src, dest) => dest.Worksheets = CreateWorksheets(dest.RptRecNum).ToList());
}));
如何让它根据子文档的 id 更新我希望它更新的元素?
在尝试了很多不同的东西之后,通过将我的更新过滤器从 "CostReportingPeriods.CostReports" 更改为 "CostReportingPeriods.$.CostReports",它完美地工作了。