Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从MongoDB中的数组中删除元素_C#_.net_Mongodb_Nosql - Fatal编程技术网

C# 从MongoDB中的数组中删除元素

C# 从MongoDB中的数组中删除元素,c#,.net,mongodb,nosql,C#,.net,Mongodb,Nosql,我刚开始学习如何使用MongoDB,而且我很早就被困在这里,所以希望有人能用一个简单的例子来帮助我 我可以成功连接到Mongo服务器,创建集合并创建要放入其中的对象。我是通过c#和c#驱动程序来完成这一切的 我在代码中定义了以下自定义对象 public class Feature { public string FeatureName { get; set; } public ObjectId Id { get; set; } public List<Scenari

我刚开始学习如何使用MongoDB,而且我很早就被困在这里,所以希望有人能用一个简单的例子来帮助我

我可以成功连接到Mongo服务器,创建集合并创建要放入其中的对象。我是通过c#和c#驱动程序来完成这一切的

我在代码中定义了以下自定义对象

public class Feature
{
    public string FeatureName { get; set; }
    public ObjectId Id { get; set; }
    public List<Scenario> Scenarios { get; set; } 
}

public class Scenario
{
    private string _notes;
    public string ScenarioName { get; set; }
    public List<string> Givens { get; set; }
    public List<string> Whens { get; set; }
    public List<string> Thens { get; set; }
    public string Explanation { get; set; }
    public string Notes { get; set; }
}
公共类功能
{
公共字符串特性名称{get;set;}
公共对象Id{get;set;}
公共列表方案{get;set;}
}
公共类场景
{
私人字符串注释;
公共字符串ScenarioName{get;set;}
公共列表给定{get;set;}
当{get;set;}时的公共列表
公共列表然后{get;set;}
公共字符串解释{get;set;}
公共字符串注释{get;set;}
}
如您所见,Feature对象包含一个属性,该属性是场景列表

在我的Mongo集合中,我有一个包含3种场景的Feature对象。我想在C#中做的是编写一种方法,可以从功能中删除特定场景:

  • 用户为方法提供功能和方案名称
  • 方法检查功能,查看其中的列表,查找scenario.scenarioname与传递给该方法的方案名称匹配的方案
  • 如果存在,则从功能中删除场景,更新Mongo并返回一个布尔值true。如果不存在,则返回false
  • 我确信,当我看到一个示例时,这一点可能会很明显,但我已经尝试过,并且在尝试通过List属性查找子对象上的属性时遇到了困难

    我希望这一切都有意义

    提前谢谢

    p我自己解决了

    public bool DeleteScenario(string featureName, string scenarioName)
        {
            var collection = GetCollection<Feature>();
            var query = Query.EQ("FeatureName", featureName);
            var resultingFeature = collection.Find(query).SetLimit(1).FirstOrDefault();
    
            if (resultingFeature == null)
            {
                return false;
            }
    
            // we have found our feature and it exists.
    
            foreach (var scenario in resultingFeature.Scenarios)
            {
                if (scenario.ScenarioName == scenarioName)
                {
                    resultingFeature.Scenarios.Remove(scenario);
                    collection.Save(resultingFeature);
                    return true;
                }
            }
    
            return true;
    
        }
    
    public bool DeleteScenario(字符串功能名、字符串场景名)
    {
    var collection=GetCollection();
    var query=query.EQ(“FeatureName”,FeatureName);
    var resultingFeature=collection.Find(query).SetLimit(1).FirstOrDefault();
    if(resultingFeature==null)
    {
    返回false;
    }
    //我们发现了我们的特征,并且它是存在的。
    foreach(resultingFeature.Scenarios中的var场景)
    {
    if(scenario.ScenarioName==ScenarioName)
    {
    resultingFeature.Scenarios.Remove(场景);
    collection.Save(结果功能);
    返回true;
    }
    }
    返回true;
    }
    
    如果您已经回答了问题,则应将其作为此问题的答案提交。如果您有后续问题,您应该将其作为单独的问题进行提问,并在必要时将其链接回此背景。你不应该用其他问题编辑你的问题。我还原了你的编辑。请将您找到的答案作为此问题的答案发布。在stackexchange上回答您自己的问题并不是不受欢迎的,而是受到鼓励的(您可以因此获得一枚徽章)。当有人有更好的答案时,他们很可能会发布它。当你的答案可以改进时,人们可能会对此发表评论并提出改进建议。