0

C# で Linq を使用して、MongoDB からランダムにレコードを取得したいと考えています。これが私がやっていることです。

public string RandomWord()
{
    using (Mongo mongo = new Mongo(_mongoConfig.BuildConfiguration()))
    {
        try
        {
            mongo.Connect();
            var db = mongo.GetDatabase(_dbName);
            IMongoCollection<dic_words> collection = db.GetCollection<dic_words>();
            return 
                (from w in collection.Linq()
                where w.word.Length > 2
                orderby Guid.NewGuid()
                select w).Take(1).FirstOrDefault().word;
        }
        catch (Exception)
        {
            throw;
        }
    }
}

そして、ここに私が得たエラーがあります

クエリが複雑すぎて MongoDB で処理できません。map-reduce クエリを手動で作成するか、クエリを単純化して Linq-to-Objects を使用してみてください。

前もって感謝します。

4

1 に答える 1

1

FluentMongo を使用しているようです。エラーはそこから来ています。

このエラーを引き起こす可能性が高い候補は、次の行です。

   orderby Guid.NewGuid()

これは FluentMongo ではサポートされていないようです。これは、返されたレコードをランダム化する別の方法を使用する必要があることを意味します。FluentMongo は OrderBy をサポートしていますが、ドキュメントにはフィールドで並べ替える機能しか記載されていません。

LINQ から SQL にマップされるものは、必ずしも MongoDB クエリにマップされるとは限らないことに注意してください。これに関するいくつかの関連する議論は、この質問と他の多くのものにあります。

ところで、MongoDB からランダムなドキュメント/オブジェクトを取得する方法については、SO と mongo-users リストの両方で多くの議論があります。Mongo Cookbookにも記事があります。ユースケースの可能な解決策について、それらを確認することをお勧めします。

于 2012-06-03T22:59:08.740 に答える