我想在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。
提前致谢。
答案 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。我建议您查看那些可能解决您的用例的方法。