我有一個看起來像的資料庫:
spider_results = [
{
"_id": {
"$oid": "345g435f543f"
},
"url": "localhost:8080/path1/",
"proxy": {
"proxy": "196.0.1.1:1500",
"protocol": "http",
},
"success": false,
},
{
"_id": {
"$oid": "14544gtf543f"
},
"url": "localhost:8080/path2/",
"proxy": {
"proxy": "196.0.1.1:1500",
"protocol": "http",
},
"success": true,
},
{
"_id": {
"$oid": "t4rw4rww4r"
},
"url": "localhost:8080/path3/",
"proxy": {
"proxy": "192.168.255.255:1500",
"protocol": "http",
},
"success": true,
},
{
"_id": {
"$oid": "ferfrw4456"
},
"url": "localhost:8080/path4/",
"proxy": {
"proxy": "192.168.255.255:1500",
"protocol": "http",
},
"success": true,
},
]
我的目標是計算每個代理“成功”/不“成功”的次數。結果將如下所示:
196.0.1.1:1500 --> success:true = 1
196.0.1.1:1500 --> success:false = 1
192.168.255.255:1500 --> success:true = 2
192.168.255.255:1500 --> success:false = 0
我一直在運行個人查詢,如
{"proxy.proxy": "192.168.255.255:1500", success: true}
{"proxy.proxy": "192.168.255.255:1500", success: false}
但隨著代理數量的增加,這顯然是不夠的。我很有可能沒有為我的問題搜索正確的搜索查詢,因為我還沒有找到任何嘗試相同型別搜索的人。
uj5u.com熱心網友回復:
詢問
- 我們需要按代理分組并計算 2 個我們沒有的欄位
true-success,false-success但我們可以根據我們已有的成功欄位創建它們。success : true變成 {"true-count": 1, "false-count": 0}success : false變成 {"true-count": 0, "false-count": 1}
現在我們在每個檔案中都有我們需要的 2 個欄位。
set添加這個額外的欄位group和count真偽的成功- 使 2 個欄位成為一個陣列并展開(以分隔不同檔案中的欄位)
project固定結構
測驗代碼在這里
aggregate(
[{"$set":
{"success":
{"$cond":
["$success",
{"true-count": 1, "false-count": 0},
{"true-count": 0, "false-count": 1}]}}},
{"$group":
{"_id": "$proxy.proxy",
"true-count": {"$sum": "$success.true-count"},
"false-count": {"$sum": "$success.false-count"}}},
{"$set":
{"success":
[{"count": "$true-count", "success": true},
{"count": "$false-count", "success": false}]}},
{"$unwind": {"path": "$success"}},
{"$project":
{"_id": 0,
"proxy": "$_id",
"count": "$success.count",
"success": "$success.success"}}])
uj5u.com熱心網友回復:
你可以這樣試試:
db.collection.aggregate([
{
$group: {
_id: {
proxy: "$proxy.proxy",
success: "$success"
},
count: {
$sum: 1
}
}
}
])
這是此查詢的結果:
[
{
"_id": {
"proxy": "196.0.1.1:1500",
"success": true
},
"count": 1
},
{
"_id": {
"proxy": "196.0.1.1:1500",
"success": false
},
"count": 1
},
{
"_id": {
"proxy": "192.168.255.255:1500",
"success": true
},
"count": 2
}
]
PS:這會計算資料庫中每個代理的成功次數,如果該代理沒有成功值,則不輸出任何內容;例如這種情況不會輸出192.168.255.255:1500 --> success:false = 0
你可以在這里試試
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368044.html
標籤:MongoDB 聚合框架 皮蒙戈 mongodb-图集
