2014-01-22 3 views
2

Я пытаюсь добавить поддокумент в список в существующем документе. Документы выглядеть следующим образом:Добавление нового поддокумента в MongoDB

public class EtaMembershipDocument : DocumentBase 
{ 
    public List<EtaAssociationDocument> EtaAssociatonDocuments { get; set; } 
} 

Я в недоумении относительно того, как добавить новый EtaAssociationDocument в список с помощью C# и MongoDB. Это моя последняя попытка:

var collection = this.DataStore.GetCollection<EtaMembershipDocument>(EtaMembershipsCollectionName); 

Update.AddToSet("EtaAssociationDocuments", BsonValue.Create(etaAssociationDocument)); 

На этой последней строке, я получаю эту ошибку:

.NET type EtaAssociationDocument cannot be mapped to a BsonValue.

Проблема заключается в том, что я даже не знаю, если это то, как я должен добавить вложенный документ. Если мой подход правильный, что я могу сделать для устранения ошибки? Если мой подход неверен, как я должен это делать?

+0

Возможный дубликат [BsonValue и пользовательские классы в MongoDB C# Driver] (http://stackoverflow.com/questions/7732663/bsonvalue-and-custom-classes-in-mongodb-c-sharp-driver) –

ответ

3

Вопрос - это дубликат, но поскольку исходный вопрос довольно старый, его ответ отчасти устарел. Вам больше не нужно вмешиваться с ручной конверсией в BsonDocument. Вместо этого, вы можете использовать строго типизированные хелперы, что является весьма полезным для рефакторинга:

collection.Update(
    Query<EtaMembershipDocument>.EQ(p => p.Id, someId), 
    Update<EtaMembershipDocument>.AddToSet 
     (p => p.EtaAssociatonDocuments, documentToAdd)); 

В отличие от PushWrapped и ToBsonDocument, это будет гарантировать, что набор вы имеете в виду реализует IEnumerable<T> и documentToAdd того же типа как параметр типа TIEnumerable<T>.

+0

Это сработало в совершенстве. Этот дублирующий ответ уже более двух лет, поэтому ваш ответ полезен. Благодаря! –

+0

Кстати, если вы знаете элегантный способ сделать этот тип вещи для * обновления * поддокумента, этот вопрос находится здесь: http://stackoverflow.com/q/21287485/279516. –

+0

Ну, в настоящее время единственный ответ на этот вопрос - Роберт Стам, он написал драйвер C# и работает для MongoDB, поэтому я считаю, что это авторитетный ответ :) – mnemosyn

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