Tho*_*mas 1 c# sorting mongodb
我正在尝试在C#中使用MongoDB实现文本搜索.
该文档未涵盖有关如何在C#中对文本搜索结果进行排序的任何内容.
我有一个标签列表,用空格分隔,以匹配.
如果我提供像"Tag1 Tag2"这样的字符串,我希望按以下顺序提供结果:
我一直试图拼凑一些代码:
var F = Builders<MongoPost>.Filter.Text(Tags);
var S = Builders<MongoPost>.Sort.MetaTextScore("textScore");
return Mongo.Driver.Find(F).Sort(S).ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
{"QueryFailure标志为真(响应为{\"$ err \":\"无法规范化查询:BadValue必须对所有$ meta排序键都有$ meta投影\",\"code \":17287}). "}
没有适当的文档来解决此错误...
然后我在这个网站上找到了以下代码:
var pipeline = new List<BsonDocument>
{
BsonSerializer.Deserialize<BsonDocument>("{ $match: { $text: { $search: \"" + Tags + "\" } } }"),
BsonSerializer.Deserialize<BsonDocument>("{ $sort: { score: { $meta: \"textScore\" } } }")
};
var R = Mongo.Driver.AggregateAsync(new BsonDocumentStagePipelineDefinition<MongoPost, MongoPost>(pipeline)).Result;
return R.ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)
至少运行没有错误,但我试图将样式放在顶部的样式中,就像你可以为API的其余部分做的那样,而不必回到必须解析的控制台样式文本字符串每次执行.另外,我需要为搜索添加更多标准,因此这种语法对我来说不实用.
我错过了哪些适当的文件?如果没有,有没有人知道如何在顶部的风格实现这一点?
使用这篇文章:使用C#驱动程序从MongoDB Collection上的文本查询中检索相关性排序结果
我让它使用以下代码:
var F = Builders<MongoPost>.Filter.Text(Tags);
var P = Builders<MongoPost>.Projection.MetaTextScore("TextMatchScore");
var S = Builders<MongoPost>.Sort.MetaTextScore("TextMatchScore");
return Mongo.Driver.Find(F).Project<MongoPost>(P).Sort(S).ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)
我的班级MongoPost有以下字段:
[BsonIgnoreIfNull]
public double? TextMatchScore { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2509 次 |
| 最近记录: |