我是MongoDb的新手,所以我只是玩弄它。
现在我创建了一个MongoDbCollection<MyDocument>
,它存储了很多MyDocuments
。 MyDocument
包含许多不同的参数,例如ID
,Name
,Birthdate
,xData
,...
class MyDocument
{
public MyDocument() { }
public ObjectID Id { get; set; }
public string Name { get; set; }
public string Birthdate { get; set; }
public BsonDocument[] xData { get; set; } // just additional data
}
如果我在MongoDbCollection
查询文件......
MongoCursor elements = collection.Find(Query.And(MyQueryInput));
例如:查询名称“Peter”的查询。我将得到一个列表,其中包含'name'等于“peter”的所有元素。它还会返回“xData”BsonDocument
中的“名称”字段。到目前为止,所有的一切都按照需要运作。
现在我要创建一个MongoDbCollection<List<MyDocument>>
,因此它是一个包含MyDocuments
的列表集合。这就是为什么我定义了一个包含MongoID
和List
的新类:
class MyMongoList
{
public MyMongoList() { }
public ObjectID Id() { get; set; }
public List<MyDocument> list { get; set; }
}
我可以将MyDocuments
添加到列表中并列出到集合中,但如果我循环播放没有任何反应。
MongoCursor elements = collection.Find(Query.And(MyQueryInput));
foreach(MyMongoList<MyDocument> list in elements)
{
Console.WriteLine("something"); // nothing happends here
}
我想知道为什么“元素”是空的。
[问题] 是否可以查询上述所有列表?
[问题] 我是否必须在MyMongoList类中添加MongoDb可以在c#列表中搜索的内容?
此刻,我不知道出了什么问题。我觉得它与MongoDb Serialization有关,但直到现在我还没有找到实现它的方法。
答案 0 :(得分:1)
我发现了自己的错误。我只需要使用Query.ElemMatch()方法。一个例子被解释为here。
查询列表我使用了以下代码:
MongoCursor elements = collection.Find(Query.ElemMatch("list",MyQueryInput));
现在,MongoDB将集合中的所有列表放入元素中,这些列表至少包含一个与标准匹配的MyDokument。