繁体   English   中英

C# MongoDB 查询中的索引值始终为 0 展开

index value always 0 in C# MongoDB query with unwind

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我得到了一些很大的帮助来获得 MongoDB 查询权: 有没有办法在 mongodb 查询中添加一个计数器?

当我将该查询转换为 C# 时,在第二个展开阶段之后,索引始终为 0。我试图将该值用作 resultId。

这是数据的片段:

"_id": ObjectId("5d1b9aea5c1dd54e8c773f42")
"timestamp":    
    [ 
      "systemTimestamp":    2019-07-02T17:56:53.765+00:00
      "serverTimestamp":    0001-01-01T00:00:00.000+00:00
      "systemTimeZone":     "System.CurrentSystemTimeZone"
    ]
"urlData":
    [0]:
    "fullUrl":"https://imgur.com/gallery/EfaQnPY"
"UID":"00000-W3W6C42GWTRE960"
"safety": "safe"

这是我如何将其翻译成 C# 开始和结束是传递给方法的 DateTime 参数

var match1 = new BsonDocument("$match",                    
    new BsonDocument("timestamp.serverTimestamp", new BsonDocument { { "$gte", begin.ToUniversalTime() }, { "$lte", end.ToUniversalTime() } });


// unwind flattens the urlData array
var unwind1 = new BsonDocument("$unwind", new BsonDocument
                {
                    { "path", "$urlData" },
                    { "includeArrayIndex", "index" }
                });

// match2 grabs only the first element of the urlData array
var match2 = new BsonDocument("$match", new BsonDocument
                {
                    { "index", 0 },
                    { "urlData.fullUrl",  new BsonDocument{ { "$regex", cleanedUrl }, { "$options", "i" } } }
                });
// group pushes all previous results into 1 array (this is to get resultId set)
var groupBy = new BsonDocument("$group", new BsonDocument
                {
                    { "_id", BsonNull.Value },
                    { "data", new BsonDocument("$push", "$$ROOT") }
                });

// now we unwind the array and have each result with resultId which starts at 0
var unwind2 = new BsonDocument("$unwind", new BsonDocument
                {
                    { "path", "$data" },
                    { "includeArrayIndex", "resultId" }
                });

// Add 1 to the resultId to get the right value
var addFields = new BsonDocument("$addFields",
                new BsonDocument("data.resultId",
                new BsonDocument("$sum",
                    new BsonArray
                    {
                            "resultId",
                            1
                    })));

var replaceRoot = new BsonDocument("$replaceRoot", new BsonDocument("newRoot", "$data"));

// separates out date, safetyRating and UID
var project = new BsonDocument("$project",
            new BsonDocument
            {
                    { "_id", 0 },
                    { "accessTime", new BsonDocument("$dateToString", new BsonDocument {
                        { "format", "%Y-%m-%d" }, { "date", "$timestamp.serverTimestamp" }
                    }) },
                    { "safetyRating", "$safety" },
                    { "url", "$urlData.fullUrl" },
                    { "userId", "$UID" },
                    { "resultId", "$resultId" }
            });

// sort by date
var sort = new BsonDocument("$sort", new BsonDocument("date", 1));

var pipeline = new[] { match1, unwind1, match2, groupBy, unwind2, addFields, replaceRoot, project, sort };

List<APIaccessedURL> queryResults = await collection.Aggregate<APIaccessedURL>(pipeline).ToListAsync();

结果 resultId 始终为 1(我验证没有 $addFields 阶段,resultId 为 0)。

{
    "resultId": 1,
    "userId": "00000-W3W6C42GWTRE960",
    "url": "https://imgur.com/gallery/fxQuNMw",
    "safetyRating": "safe",
    "accessTime": "2019-07-02T00:00:00Z"
},
{
    "resultId": 1,
    "userId": "00000-W3W6C42GWTRE960",
    "url": "https://imgur.com/",
    "safetyRating": "safe",
    "accessTime": "2019-07-02T00:00:00Z"
},

关于我做错了什么的想法将不胜感激!

问题暂未有回复.您可以查看右边的相关问题.
2 C#MongoDB“近”查询

我有一个看起来像这样的mongo集合: 我想使用C#linq预先形成“NEAR”查询 它需要看起来像那样 我的问题是 - 我应该对“位置”的内容进行编码? 我如何查看上面收藏的积分? 谢谢。 ...

3 如何在C#mongodb中查询BsonDocument

我有文档集合,其中包含用于文档的数组。 我可以分别在C#中查询子文档。 但这将再次打击数据库服务器。 但就我而言,我最初是在查询并获取文档。 但是之后,我需要重新查询该文档,而不必再次访问数据库。 有谁知道如何在C#中查询BsonDocument(Not Collectio ...

4 C# MongoDB 不同的查询语法

我正在尝试从 MongoDB 的字段中获取不同的值。 我在语法方面遇到了真正的麻烦。 使用 mongoshell 相对容易,这是我运行的查询: 此查询返回一个包含所有不同值的字符串数组。 现在我正在尝试使用最新的官方 MongoDB 驱动程序来获得正确的语法,但没有取得太大的成功。 这是我的代 ...

5 C#MongoDB查询日期范围

我是C#MongoDB驱动程序的新手,并且有一个关于查询具有日期范围的对象的问题。 这是我的收藏 当我们将日期作为输入时,我想编写一个查询以获取“ ssimDsc”。 如果我将日期指定为03MAR18 ...则应返回“ ssimBeg”位于03MAR18以及03MAR18之后的所有条 ...

6 使用BsonClassMaps的C#MongoDB查询

我是MongoDB的新手,想知道如何使用注册的BsonClassMaps查询域对象。 考虑以下映射: 域实体是“航程”。 在这个简单的示例中,它由一个复杂的类型“ Schedule”(带有开始日期和结束日期)和一个VoyageNumber(带有一个字符串ID字段)组成。 “ Voy ...

7 使用C#MongoDB查询嵌套文档

我有一个名为Record的文档,其中包含一个Athlete作为嵌套文档。 结构在JSON中看起来像这样: 你如何查询这个结构来检索基于Athlete.Id的Record对象? IE如果我有运动员的身份证,我想找回他们的记录,你会怎么做? ...

8 C#MongoDb查询和使用底层JSON

希望这是一个简单的例子,但不确定是否会因为在线信息似乎表明您不使用强类型模型就无法进行查询。 为了给场景提供一些背景知识,我有一个客户端javascript应用程序,该应用程序在本地创建和存储模型(本地存储)。 但是,有一个Web服务(ASP MVC)可以通过授权用户发送模型,它将对其进 ...

9 C#Mongodb首先通过比较字段值来查找

我试图获取第一条记录,在该记录中我正在比较同一记录中的2个字段值,但是正在获取ArgumentException {“不支持的where子句:(x.CharCount!= x.Body.Length)。”} 关于如何纠正这一点的任何建议? 更新:最终结果将是获得第一个记录,其中charc ...

10 C#MongoDB在数组中查找

我在mongodb中有以下查询: 我必须将其转换为C#代码。 我已经搜索了很多东西,似乎没有什么适合我的需求。 我什至进行了一场比赛: 到目前为止,这是我在C#中提出的: 还不完整 显然没有找到正确的解决方案。 希望有人能帮忙! 谢谢! ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM