使用C#Linq在MongoDB中进行随机顶部查询

时间:2012-06-03 10:41:30

标签: 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);
            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。

提前致谢。

1 个答案:

答案 0 :(得分:1)

看起来你正在使用FluentMongo - 你得到的错误来自那里。

导致此错误的可能候选人是这一行:

   orderby Guid.NewGuid()

FluentMongo似乎不支持此功能。这意味着您可能希望使用不同的方法随机化返回的记录。 FluentMongo支持OrderBy,但their documentation仅提及按字段排序的能力。

请注意,从LINQ映射到SQL的内容不一定映射到MongoDB查询。 有关此问题的一些相关讨论在this question和其他许多内容中进行。

顺便说一句,关于如何从SO和mongo-users列表中的MongoDB中获取随机文档/对象的讨论很多。 Mongo Cookbook中甚至还有一个write-up of it。我建议您查看那些可能解决您的用例的方法。