C# MongoDB中使用C-Linq的随机Top查询

C# MongoDB中使用C-Linq的随机Top查询,c#,linq,mongodb,random,mongodb-.net-driver,C#,Linq,Mongodb,Random,Mongodb .net Driver,我想使用C中的Linq从MongoDB中随机获取一个记录 public string RandomWord() { using (Mongo mongo = new Mongo(_mongoConfig.BuildConfiguration())) { try { mongo.Connect(); var db = mongo.GetDatabase(_dbName); IMo

我想使用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创建对象


提前感谢。

看起来您正在使用FluentMongo-您得到的错误来自于此

导致此错误的可能原因如下:

   orderby Guid.NewGuid()
FluentMongo似乎不支持这一点。这意味着您可能希望使用不同的方法对返回的记录进行随机分组。FluentMongo确实支持OrderBy,但只提到了按字段排序的功能

请注意,从LINQ映射到SQL的内容不一定映射到MongoDB查询。 关于这一点的一些相关讨论正在进行中,还有许多其他讨论


顺便说一下,关于如何从MongoDB获取随机文档/对象,在SO和mongo用户列表上都有很多讨论。甚至在Mongo食谱中也有一本。我建议您查看这些内容,以找到您用例的可能解决方案。

请注意,既然官方C驱动程序支持LINQ,您可能应该改用不再支持的FluentMongo。有关更多信息,请参阅。我开发了一个自定义解决方案。将所有Id添加到可缓存列表中,并获取随机Id以向db发送查询。