[英]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.