簡體   English   中英

C# MongoDB 查詢中的索引值始終為 0 展開

[英]index value always 0 in C# MongoDB query with unwind

我得到了一些很大的幫助來獲得 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"
},

關於我做錯了什么的想法將不勝感激!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM