我得到了一些非常有用的帮助,可以使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"

这是我如何将传递给该方法的DateTime参数转换为C#begin&end

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"
},

对于我在做什么错的想法将不胜感激!

  ask by Tessa Sullivan translate from so

本文未有回复,本站智能推荐:

1回复

像 C# Mongo DB 中的查询

在我的项目中使用 mongodb,使用 linq 连接到 mongodb。 这是创建的过滤器查询 Input是模型对象,而oldBatchDescription是属性名称。 OldBatchDesc是列名。 在当前场景中,假设用户在文本框中输入值 ab,该值设置为input.oldBat
1回复

如何在C#mongodb中查询BsonDocument

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

C# MongoDB 不同的查询语法

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

C#MongoDB查询日期范围

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

使用BsonClassMaps的C#MongoDB查询

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

使用C#MongoDB查询嵌套文档

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

C#MongoDb查询和使用底层JSON

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

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

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