我是新来的MongoDB,并想知道与注册的BsonClassMaps查询域对象。 考虑下面的映射:C#MongoDB查询与BsonClassMaps
BsonClassMap.RegisterClassMap<VoyageNumber>(cm =>
{ cm.MapField<string>(p => p.Id); });
BsonClassMap.RegisterClassMap<Schedule>(cm =>
{ cm.MapField<DateTime>(p => p.EndDate); cm.MapField<DateTime>(p => p.StartDate); });
BsonClassMap.RegisterClassMap<Voyage>(cm =>
{ cm.MapIdField<VoyageNumber>(p => p.VoyageNumber); cm.MapField<Schedule>(p => p.Schedule); });
域实体是 “航程”。在这个简单的例子中,它由一个复杂的类型“Schedule”(带有开始日期和结束日期)和一个VoyageNumber(带有一个字符串id字段)组成。 “VoyageNumber”是实体的标识符。
现在我可以插入一个新的航程只是罚款:
MongoCollection<Voyage> mongoVoyages = context.MyDB.GetCollection<Voyage>("Voyages");
mongoVoyages.Insert<Voyage>(voyage);
我可以检索通过一个航程:
MongoCollection mongoVoyages = context.MyDB.GetCollection("Voyages");
BsonDocument result = mongoVoyages.FindOneAs<BsonDocument>();
BsonDocument sched = result["Schedule"].AsBsonDocument;
DateTime start = sched["StartDate"].AsDateTime;
//etc...
当然现在我想通过ID进行搜索的航行。我如何通过上面显示的映射来实现这一点?我尝试了这样的事情,但失败了:
Query.EQ("VoyageNumber", someStringID)
我使用官方的C#驱动程序1.0。
谢谢你,工作以及促进了我的面向文档DB的理解。所以你说我不需要映射除IdField之外的其他字段? – hoetz 2011-04-10 14:59:36
@Malkier:不,你根本不需要映射。至少在你的例子中。我从文档中添加了一些笔记来解决我的问题。 – 2011-04-10 16:34:21