1

如何使用官方 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);

谢谢你。

4

2 回答 2

8

要仅使用 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 变量,看看是否得到了您想要的结果。

于 2011-02-04T19:39:23.090 回答
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。

于 2011-01-25T08:39:44.097 回答