如何添加bsondocuments列表作为bsondocument的元素

时间:2011-01-25 06:07:31

标签: c# mongodb mongodb-.net-driver

如何使用官方c#驱动程序创建以下文档?

{
    "name": "John Doe",
    "classess": [
        {
            "classname": "Class1"
        }
        {
            "classname": "Class2"
        }
    ]
}

以下代码不起作用

string cs = "mongodb://localhost";
MongoServer server = MongoServer.Create(cs);
MongoDatabase test = server.GetDatabase("test");

MongoCollection<BsonDocument> students = test.GetCollection("students");

BsonDocument doc = new BsonDocument();
doc.Add(new BsonElement("name", "John doe"));

//Create the list
List<BsonDocument> classes = new List<BsonDocument>();
classes.Add(new BsonDocument(new BsonElement("classname","Test1")));
classes.Add(new BsonDocument(new BsonElement("classname","Test2")));

以下行会因为显而易见的原因而抛出错误。这样做的正确方法是什么?

doc.Add(new BsonElement("classess",classes));
students.Insert(doc);

谢谢。

2 个答案:

答案 0 :(得分:7)

要仅使用BsonDocument类创建该文档,我会写:

        var document = new BsonDocument {
            { "name", "John Doe" },
            { "classes", new BsonArray {
                new BsonDocument("classname", "Class1"),
                new BsonDocument("classname", "Class2")
            }}
        };
        var json = document.ToJson();

此示例使用C#的集合初始值设定语法。

最后一行仅用于调试。你可以查看json变量,看看你是否得到了你想要的结果。

答案 1 :(得分:1)

假设您有以下课程:

public class NestedClass
{
  public string ClassName {get;set;}
}

public class Person
{
  public Person()
  {
    Classes = new List<NestedClass>();
  }  

  [BsonId]
  public string PersonId {get;set;}

  public string Name {get;set;}

  public List<NestedClass> Classes {get;set;}
}

你需要:

创建要保存的类的实例并初始化

 var person = new Person(){PersonId = Guid.NewGuid().ToString(), Name = "Some name"};
 person.Classes.Add(new NestedClass(){ ClassName="classname1"})
 person.Classes.Add(new NestedClass(){ ClassName="classname2"})

var server = MongoServer.Create("mongodb://localhost:27020");
  MongoDatabase test = server.GetDatabase("test");
  MongoCollection students = test.GetCollection<Person>("students");
  students.Insert(person.ToBsonDocument()); // it will automatically serialize and insert person

还要确保你已经运行了mongodb。