2016-06-13 2 views
3

У меня есть модельный класс, мне нужно сохранить его в коллекции MongoDB.Как преобразовать список <T> в BsonArray для сохранения документа MongoDB

Мои модели Класс:

public Class Employee 
{ 
    public string EmpID { get; set; } 
    public string EmpName { get; set; } 
    public List<Mobile> EmpMobile { get; set; } 
} 

public Class Mobile 
{ 
    public string MobID { get; set; } 
    public string MobNumber { get; set; } 
    public bool IsPreferred { get; set; } 
} 

Значения

Employee EmpInfo = new Employee() 
{ 
    EmpID = "100", 
    EmpName = "John", 
    EmpMobile = new List<Mobile>() 
    { 
     { MobNumber = "55566610", IsPreferred = true }, 
     { MobNumber = "55566611", IsPreferred = false }, 
    } 
} 

BsonDocument _employee = new BsonDocument() 
          { 
           { "Emp_ID", EmpInfo.EmpID }, 
           { "Emp_Name", EmpInfo.EmpName }, 
           { "Emp_Mobile", new BsonArray (EmpInfo.EmpMobile.Select(m => new 
            { 
             MobID = new ObjectId(), 
             MobNumber = m.MobNumber, 
             IsPreferred = m.IsPreferred 
            })) } 
          }; 

var collection = _database.GetCollection<BsonDocument>("EmployeeInfo"); 
collection.InsertOne(_employee); 

Я хочу, чтобы сохранить выше EmpInfo типа Employee в MongoDB. Но я не могу создать BsonDocument. Пожалуйста, помогите мне в том, что в приведенном выше коде есть что-то не так. Если да, то помогите мне.

+0

Что такое 'employee.Email'? Не могли бы вы изменить его на 'EmpInfo.EmpMobile.Select (...)'? –

+0

извините, это EmpMobile. Опечатка. Теперь проверьте сообщение, я отредактировал ошибки. –

+0

- это коллекция, посвященная хранению данных «Сотрудник»? – profesor79

ответ

2

нет необходимости сериализации в BSON документа Вы можете использовать коллекцию типизированных и просто вставить данные Пожалуйста прилагается код snipet с обновленными классовой структуры

void Main() 
{ 
    // To directly connect to a single MongoDB server 
    // or use a connection string 
    var client = new MongoClient("mongodb://localhost:27017"); 
    var database = client.GetDatabase("test");  

var collectionEmpInfo = database.GetCollection<Employee>("Employee"); 

Employee EmpInfo = new Employee 
{  
    EmpID = "100", 
    EmpName = "John", 
    EmpMobile = new List<Mobile> 
    { 
     new Mobile{ MobNumber = "55566610", IsPreferred = true, MobID = ObjectId.GenerateNewId() }, 
     new Mobile{ MobNumber = "55566611", IsPreferred = false, MobID = ObjectId.GenerateNewId() }, 
    } 
}; 

collectionEmpInfo.InsertOne(EmpInfo); 
var empList = collectionEmpInfo.Find(new BsonDocument()).ToList(); 
empList.Dump(); //dump is used in linqPad 

} 

public class Employee 
{ 
    public ObjectId Id { get; set; } 
    public string EmpID { get; set; } 
    public string EmpName { get; set; } 
    public List<Mobile> EmpMobile { get; set; } 
} 

public class Mobile 
{ 
    public ObjectId MobID { get; set; } 
    public string MobNumber { get; set; } 
    public bool IsPreferred { get; set; } 
} 

screenshot from LinqPad

+0

Позвольте мне узнать еще одну информацию. Как добавить DateTime в документ MongoDB. Сейчас я использую новую DateTime(), но в MongoDB это показывает -62135596800000. –

+0

@IRPunch Я добавил поле CreatedAt в Employee, с инициализацией CreatedAt = DateTime.Now, и он выглядит хорошо – profesor79

+0

У меня есть еще два вопроса в mongodb - можете ли вы, пожалуйста, помочь мне, пожалуйста, 1. [Where Clause in Embedded Document] (http : //stackoverflow.com/questions/37801269/step-by-step-single-where-clause-query-in-a-embedded-document-of-mongodb-collect) 2. [Вставить много документов] (http://stackoverflow.com/questions/37802690/insertmany-document-in-a-mongodb-collection-using-c-sharp-bsonarray) –

0

Кроме того, чтобы ответить на выше , Я могу предложить следующий код, если вы хотите напрямую связаться с Bson по какой-то причине:

BsonDocument _employee = new BsonDocument() 
{ 
    { "Emp_ID", EmpInfo.EmpID }, 
    { "Emp_Name", EmpInfo.EmpName }, 
    { "Emp_Mobile", BsonArray.Create(EmpInfo.EmpMobile.Select(m => new BsonDocument() 
     { 
      { "MobID" , new ObjectId() }, 
      { "MobNumber", m.MobNumber }, 
      { "IsPreferred", m.IsPreferred } 
     })) } 
}; 

Причина ошибки в том, что BsonArray.Create создает массив значений, а не массив объектов. См. this question.

 Смежные вопросы

  • Нет связанных вопросов^_^