当前位置: 首页 > 知识库问答 >
问题:

使用C#驱动程序从MongoDB集合的文本查询中检索相关性排序结果

赫连子石
2023-03-14
db.articles.find(
   { status: "A", $text: { $search: "coffee cake" } },
   { score: { $meta: "textScore" } }
).sort( { date: 1, score: { $meta: "textScore" } } )
public IEnumerable<T> TextSearch<T>(MongoCollection<T> coll, string text) {
    var cursor = coll.Find(Query.Text(text))
        .SetSortOrder(SortBy<T>.MetaTextScore(???));
    foreach(var t in cursor) {
        // strip projected score from value
        yield return t;
    }
}

共有1个答案

慕鹏
2023-03-14

我通过反复试验使这个工作正常。诀窍在于,您的数据对象上需要已经有一个字段,该字段将保存metatextscore值。所以给定接口:

interface ITextSearchSortable {
    double? TextMatchScore { get; set; }
}

最后一个函数如下所示:

public IEnumerable<T> TextSearch<T>(MongoCollection<T> coll, string text) where T:ITextSearchSortable {
    var cursor = coll.Find(Query.Text(text))
        .SetFields(Fields<T>.MetaTextScore(t => t.TextMatchScore))
        .SetSortOrder(SortBy<T>MetaTextScore(t => t.TextMatchScore));
    foreach(var t in cursor) {
        // prevent saving the value back into the database
        t.TextMatchScore = null;
        yield return t;
    }
}

值得注意的是,TextMatchScore不能有[BsonIgnore]装饰,否则会出现异常。但是,它可以有[BsonIgnoreIfNull]装饰。因此,通过在生成数据对象之前清除数据对象的值,可以将数据对象保存回集合中,而不会添加垃圾值。

 类似资料:
  • 有人能给我举个例子,说明如何使用PHPs新驱动程序计算MongoDB集合中的文档数吗(http://php.net/manual/en/set.mongodb.php) 所有示例似乎都在使用旧的驱动程序或库!

  • 我试图在MongoDB\驱动程序\查询中使用选项: 如果$选项似乎可以: --------$options: 数组([排序]= $query没有给我好的选项: 限制和批量大小不等于20,为什么?请问怎么办? 提前感谢

  • 通过使用MongoDB和Java驱动程序,我有一个用户集合,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断出对象的创建时间戳)。 问题是,用ObjectId查询似乎不起作用:我总是没有结果。为了测试的目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保我能得到结果: {“_id”:ObjectId(“565ef85ee4b0a4db3c2fc96

  • 我开始在我的应用程序中使用MongoDB。我正在使用Robo3T学习和测试查询,现在,我正在将查询翻译成C#。 我对蒙古机器人3T的质疑 在Robo 3T上运行上述脚本,其检索到以下结果: 现在,我试图在我的. NET MVC项目上重现这个结果,我面临着将子字符串转换为C#的困难。 C#代码 这种方式很好,但是,它是按整个字符串日期分组的,我想按短字符串日期分组,如:“2019-03-01”。 我

  • 我正在尝试使用MongoDBJava驱动程序作为聚合命令的一部分创建查询。目前我允许日期范围或特定日期数组作为参数。例如 日期范围查询工作正常,我解析xml并将其转换为在mongo中生成以下查询的DBObject; 对于指定日期,我只想返回在给定日期的00:00:00.000和第二天的00:00:00.000之间发生的结果。根据我对mongo查询的基本了解,我希望做一个类似于日期范围的$匹配,但是

  • 我在表1中的MongoDB中有10000条记录。 我在0.08秒内得到10000条记录的结果。 现在,同样的查询m在nodejs中使用mongodb本地驱动程序运行,在15秒内得到结果。 我不明白为什么这两者之间有这么大的区别。我不知道我在nodejs中做错了什么。我已经用mongodb本地驱动程序在nodejs中编写了相同的查询。