2

次のようなクラスがあるとします。

public class BOa
{

    public ObjectId Id { get; set; }

    public string Name { get; set; }

    public List<BOb> VisiteEffettuate = new List<BOb>();
}

public class BOvalues
{

    public DateTime Data { get; set; }
    public int Age { get; set; }
    public int Score { get; set;}

 }

明確にするために、MongoDBには多くのBOaのコレクションがあります。それぞれに多くの(...のリスト)BO値が含まれています。FluentMongoLINQ(または他の方法)を使用して、たとえば、スコアが値より大きいか、2つの値の間の年齢であるBO値のリストを取得する方法がわかります。

SelectManyを使用したかったのですが、fluentmongoではサポートされていないようです。

この結果を得るのに最適な方法はどれですか?

前もって感謝します!

編集:LINQで代わりにQueryBuilderを使用してみました...例:

        var query = MongoDB.Driver.Builders.Query.ElemMatch("VisiteEffettuate", MongoDB.Driver.Builders.Query.And( 
                MongoDB.Driver.Builders.Query.GT("Age", 32),
                MongoDB.Driver.Builders.Query.EQ("Name", "xxxx")
                )
                );

        var res = pazienti.Find(query);

...等々。うまくいくようです。ただし、QueryBuilderはそれほど文書化されておらず、(それについてはよくわかりませんが)プログラムでクエリを作成する可能性はありません(たとえば、動的LINQなど)。

4

2 に答える 2

2

Any演算子を使用してクエリを書き直すことができます。

col.AsQueryable().Where(x => x.Any(y => y.Age < 40));

これは現在FluentMongoで機能します。ただし、公式ドライバーがlinqのサポートを取得しているため、FluentMongoはサポートされているプロジェクトではなくなりました。

これは現在、公式ドライバーでは機能しませんが、バージョン1.5で機能する予定です。1.5が出るまで、今のところクエリビルダーを使い続けることをお勧めします。

于 2012-05-15T18:55:23.997 に答える
0

LINQクエリをネイティブにサポートするようになった公式のC#ドライバーを使用できます。私はそれを使用しました、そしてそれは素晴らしく働きます。

こちらのドキュメントを確認してください:http ://www.mongodb.org/display/DOCS/CSharp+Driver+LINQ+Tutorial

于 2012-05-14T13:51:23.810 に答える