2014-01-22 29 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#驱动程序中的自定义类的可能的重复](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)); 

不像PushWrappedToBsonDocument,这将确保集你是指实现IEnumerable<T>documentToAdd是相同类型的作为IEnumerable<T>的类型参数T

+0

这工作完美。那个重复的答案现在已经过了两年了,所以你的回答很有帮助。谢谢! –

+0

顺便说一句,如果你碰巧知道一个优雅的方式来做*这种类型的事情*更新*子文件,这个问题在这里:http://stackoverflow.com/q/21287485/279516。 –

+0

那么,这个问题目前唯一的答案是来自Robert Stam,他编写了C#驱动程序并为MongoDB工作,所以我认为这是一个权威的回答:) – mnemosyn

相关问题