从MongoDB中的数组中删除元素

时间:2014-06-11 22:30:54

标签: c# .net mongodb nosql

我是学习如何使用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; }
}

如您所见,Feature对象包含一个属性,它是一个场景列表。

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

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

    我希望一切都有道理??!?

    提前致谢。

    P

1 个答案:

答案 0 :(得分:2)

我自己解决了......

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;

    }