【问题标题】:C# Mongo remove sub document of sub documentC# Mongo 删除子文档的子文档
【发布时间】:2017-06-27 04:10:34
【问题描述】:

我的收藏中有以下文档:

{
    "Target_Year" : 2017,
    "Target_Month" : 6,
    "Performance" : [ 
        {
            "Report_Day" : 1,
            "SM_Name" : "RACHEL",
            "Total" : [{"SM": "A"},
                       {"SM": "B"}
                      ]
        }, 
    ]
}

我的代码

var builder = Builders<BsonDocument>.Filter;
var filterMain = builder.Eq("Target_Year", "2017") & builder.Eq("Target_Month", "6");
var filterPerf = builder.Eq("Report_Day", "1");
mongoDB.SuperiorPerformance.FindOneAndUpdate(filterMain, Builders<BsonDocument>.Update.PullFilter("Performance", filterPerf));

如何将我的代码修改为仅从 Total 中删除 {"SM": "A"}?

【问题讨论】:

  • 删除 {"SM": "A"} 后更新总计
  • 您能进一步详细说明吗?我无法得到它。
  • var filterPerf = builder.Eq("Report_Day", "1"), 像这样更新性能 "Performance" : [ { "Report_Day" : 1, "SM_Name" : "RACHEL", "Total " : [ {"SM": "B"} ] }, ],在 c# List 中表示,删除 Item。
  • 这个答案是否符合您的要求
  • @VijayRaheja 您的 cmets 没有解决问题,但给出的答案可以解决。这里需要两件事来实现$pull。 1. 您需要包含一些内容以匹配查询中的“外部”数组元素。 2. 构造$pull 语句需要位置$ 运算符来表示匹配的索引,然后需要指向正确的字段以实际上“拉”出。它不是 C# 列表,而是集合中的 MongoDB 文档。

标签: c# mongodb mongodb-query


【解决方案1】:

您需要匹配查询中的“外部”数组以进行选择,然后在$pull 的路径中使用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 filterTotal = builder.Eq("SM", "A");

mongoDB.SuperiorPerformance.FindOneAndUpdate(
  filterMain,
  Builders<BsonDocument>.Update.PullFilter("Performance.$.Total", filterTotal));

工作原理与此相同:

.update(
  { "Target_Year": 2017, "Target_Month": 6, "Performance.Report_Day": 1 },
  { "$pull": { "Performance.$.Total": { "SM": "A" } } }
)

运行并测试并给我结果:

{
        "_id" : ObjectId("5951e89738470d375d40ac9e"),
        "Target_Year" : 2017,
        "Target_Month" : 6,
        "Performance" : [
                {
                        "Report_Day" : 1,
                        "SM_Name" : "RACHEL",
                        "Total" : [
                                {
                                        "SM" : "B"
                                }
                        ]
                }
        ]
}

【讨论】:

  • @CheeMun 如果您有新问题,请Ask a New Question。如果您发布的新问题和这个问题一样清晰,那么我本人或其他人将很乐意回答。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2023-03-08
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
相关资源
最近更新 更多