使用异步在mongodb查询投影中的不同行为

亚伦·纽曼(Aaron Newman)

我在c#中实现搜索方法。问题是分数元数据未包含在结果中,从而导致其在最后一行异常。就像在没有project子句的情况下进行查找一样。我正在使用C#驱动程序的2.2.4.26版本。

    [HttpPost] public async Task<JsonResult> SearchPost(string str)
    {
        _client = new MongoClient("mongodb://localhost:27017");
        _database = _client.GetDatabase("test");
        IMongoCollection<BsonDocument> collection = _database.GetCollection<BsonDocument>("test");

        MongoDB.Bson.BsonDocument searchDoc
            = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(
                "{$text:{$search:'" + str + "'}}");
        MongoDB.Bson.BsonDocument metaDoc
            = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(
                "{score: {$meta: 'textScore'}}");

        IFindFluent<BsonDocument, BsonDocument> query = collection.Find(searchDoc);
        query.Project(metaDoc);

        List<BsonDocument> col = await query.ToListAsync();
        foreach (BsonDocument doc in col)
         {
             jsonResult = doc.ToJson();
             double score = doc.FirstOrDefault(x => x.Name == "score").Value.AsDouble; 

如果我以这种方式设置查询(在我看来在语法上是等效的),那么我确实会得到分数结果:

    List<BsonDocument> col = await collection.Find(searchDoc).Project(metaDoc).ToListAsync();

正确的结果如下所示:

{
    "_id" : "41608a74-8434-45e4-8404-99922f761dae",
    "Path" : "C:\\src\\ba\\mongo\\samples\\xml\\item_20081_v11",
    "Files" : [ 
        "content_en-us.xml", 
        "content_es-mx.xml", 
        "metadata.xml", 
        "rubric.xml", 
        "template.xml", 
        "translation_en-us.xml", 
        "translation_es-mx.xml"
    ],
    "ItemXml" : "....be used as a Paramecium cell membrane ...",
    "score" : 1.58333333333333
}
克雷格·威尔逊(Craig Wilson)

您需要将query.Project(metaDoc)的结果分配回查询。就像LINQ一样,IFindFluent接口是不可变的。

query = query.Project(metaDoc);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

异步等待的不同行为

来自分类Dev

异步等待的不同行为

来自分类Dev

WindowsLookAndFeel中的不同行为

来自分类Dev

mongodb中的投影查询

来自分类Dev

java中println()的不同行为

来自分类Dev

QML Canvas:渲染中的不同行为

来自分类Dev

JavaScript代码中的不同行为

来自分类Dev

@AfterThrowing 在 Spring 中的不同行为

来自分类Dev

使用UISearchController进行segue的不同行为

来自分类Dev

在这两个查询中按SQL逐级解释Connect的不同行为

来自分类Dev

rsync的不同行为

来自分类Dev

sqlite查询比较不同行中的数据

来自分类Dev

不同浏览器中模糊事件的不同行为

来自分类Dev

在ghci中使用变量vs文字数调用ghci中的函数时的不同行为

来自分类Dev

Oracle中“ between”运算符的不同行为

来自分类Dev

理解2.9和2.10中的不同行为

来自分类Dev

pylab:shell和脚本中的不同行为

来自分类Dev

Haskell中Applicative在元组和列表上的不同行为

来自分类Dev

红宝石中“ do .. end”和“ {..}”块的不同行为

来自分类Dev

嵌套类中g ++和clang ++之间的不同行为

来自分类Dev

Ruby 2.6 / 2.7中public_send的不同行为

来自分类Dev

在GCC和MSVC中,consteval的不同行为

来自分类Dev

`rails new`:Linux和Windows中的不同行为

来自分类Dev

Oracle中“ between”运算符的不同行为

来自分类Dev

$(...)在zsh和bash函数中的不同行为

来自分类Dev

红宝石中“ do .. end”和“ {..}”块的不同行为

来自分类Dev

pylab:shell和脚本中的不同行为

来自分类Dev

SQL Server中Round函数的不同行为

来自分类Dev

Laravel Homestead和Laravel Forge中的不同行为