如何使用查询搜索多个列表<t>的集合?</t>

时间:2014-07-31 14:44:06

标签: c# list mongodb serialization

我是MongoDb的新手,所以我只是玩弄它。

现在我创建了一个MongoDbCollection<MyDocument>,它存储了很多MyDocumentsMyDocument包含许多不同的参数,例如IDNameBirthdatexData,...

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的列表集合。这就是为什么我定义了一个包含MongoIDList的新类:

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有关,但直到现在我还没有找到实现它的方法。

1 个答案:

答案 0 :(得分:1)

我发现了自己的错误。我只需要使用Query.ElemMatch()方法。一个例子被解释为here

查询列表我使用了以下代码:

MongoCursor elements = collection.Find(Query.ElemMatch("list",MyQueryInput));

现在,MongoDB将集合中的所有列表放入元素中,这些列表至少包含一个与标准匹配的MyDokument。