【问题标题】:Random Top query in MongoDB using C# Linq使用 C# Linq 在 MongoDB 中进行随机顶部查询
【发布时间】:2023-03-18 12:20:01
【问题描述】:

我想在 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。

提前致谢。

【问题讨论】:

标签: c# linq mongodb random mongodb-.net-driver


【解决方案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。我建议您查看这些内容,以了解您的用例的可能解决方案。

【讨论】:

  • 我开发了一个自定义解决方案。将所有 Id 添加到可缓存列表并随机获取一个以向 db 发送查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 2019-02-03
  • 2015-08-25
  • 2019-11-09
相关资源
最近更新 更多