我想在MongoDB中使用C#中的Linq随机获取一张记录。这就是我在做的事。
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处理。尝试手工构建映射-减少查询或简化查询,并使用Linq到对象。
提前谢谢。
发布于 2012-06-03 22:59:08
看起来您正在使用FluentMongo --您得到的错误来自于此。
可能导致此错误的候选代码是以下一行:
orderby Guid.NewGuid()FluentMongo似乎不支持这一点。这意味着您可能希望使用另一种方法对返回的记录进行随机化。FluentMongo确实支持OrderBy,但是他们的文件只提到了按字段排序的能力。
请注意,从LINQ映射的内容不一定映射到MongoDB查询。有关这一点的一些相关讨论在这个问题和其他许多方面都有。
顺便说一句,关于如何从MongoDB中获取一个随机文档/对象,在SO和mongo用户列表上都有很多讨论。在蒙古族烹饪书中甚至有一个写出来。我建议审查这些问题,以便为您的用例提供可能的解决方案。
https://stackoverflow.com/questions/10869634
复制相似问题