我需要使用聚合來獲取不同的值,并且它們需要按字串排序。在這種情況下,我有一個包含大量關于地點的檔案的集合。我需要撰寫一個代碼,輸出位于“布朗克斯”的前十個地點,按地點名稱排序(從 z 到 a) - 并且只顯示地點名稱。
JSON 格式的一個檔案示例。有許多相似但具有不同值的:
{
"borough": "Bronx",
"cuisine": "Bakery",
"name": "Champion Bakery",
"restaurant_id": "40423830"
}
自治市鎮有幾個重復的名稱:布朗克斯,所以我需要使用聚合來僅獲取不同的值。
我嘗試使用不同的命令,但沒有任何效果——我確實得到了不同的值,但它們往往是隨機的并且沒有排序。使用 find,排序確實有效。我在這里檢查了各種答案,但沒有任何幫助。
我希望輸出的排序與此類似,但沒有重復值:
{ "name" : "Zaro'S Bread Basket" }
{ "name" : "Yolanda Pizzeria Restaurant" }
{ "name" : "Yankee Tavern" }
{ "name" : "Yankee Jz Pizza" }
{ "name" : "Woodlawn Cafe" }
{ "name" : "Wild Asia" }
{ "name" : "Wilbel Pizza" }
{ "name" : "White Castle" }
{ "name" : "White Castle" }
{ "name" : "White Castle" }
我試過的代碼 輸出:
db.places.aggregate([
{ $match: { borough: "Bronx" } },
{ $group: { _id: "$name" } },
{ $sort: { name: -1 } },
{ $limit: 10 }
]).pretty()
輸出:
{ "_id" : "Morris Park Bake Shop" }
{ "_id" : "Roca Tone Seafood Restaurant" }
{ "_id" : "Rolen Bagels" }
{ "_id" : "Casa Promesa" }
{ "_id" : "Celeste'S Snack Bar" }
{ "_id" : "The Pizza Place" }
{ "_id" : "Bronx Grill" }
{ "_id" : "Pepe Joes Pizzeria" }
{ "_id" : "Ray'S Pizza Restuarant" }
{ "_id" : "Boulevard Tavern" }
db.places.aggregate([
{ $match: { borough: "Bronx" } },
{ $sort: { name: -1 } },
{ $group: { _id: "$name" } },
{ $limit: 10 }
]).pretty()
輸出:
{ "_id" : "Pepe Joes Pizzeria" }
{ "_id" : "Bronx Grill" }
{ "_id" : "Ray'S Pizza Restuarant" }
{ "_id" : "The Pizza Place" }
{ "_id" : "Rolen Bagels" }
{ "_id" : "Celeste'S Snack Bar" }
{ "_id" : "Casa Promesa" }
{ "_id" : "Boulevard Tavern" }
{ "_id" : "Morris Park Bake Shop" }
{ "_id" : "Roca Tone Seafood Restaurant" }
db.places.aggregate([
{ $match: { borough: "Bronx" } },
{ $sort: { name: -1 } },
{ $group: { _id: "$name" } },
{ $sort: { name: -1 } },
{ $limit: 10 }
]).pretty()
輸出:
{ "_id" : "Morris Park Bake Shop" }
{ "_id" : "Roca Tone Seafood Restaurant" }
{ "_id" : "Rolen Bagels" }
{ "_id" : "Boulevard Tavern" }
{ "_id" : "Celeste'S Snack Bar" }
{ "_id" : "The Pizza Place" }
{ "_id" : "Bronx Grill" }
{ "_id" : "Pepe Joes Pizzeria" }
{ "_id" : "Ray'S Pizza Restuarant" }
{ "_id" : "Casa Promesa" }
先感謝您!
uj5u.com熱心網友回復:
您的代碼運行良好。如您所見,您的{ $sort: { _id: -1 }字母T將位于頂部,字母B位于末尾。
db.collection.aggregate([
{
$match: {
borough: "Bronx"
}
},
{
$group: {
_id: "$name"
}
},
{
$sort: {
_id: -1
}
},
{
$limit: 10
},
{
$project: {
_id: 0,
name: "$_id"
}
}
])
輸出
[
{
"name": "Zaro'S Bread Basket"
},
{
"name": "Yolanda Pizzeria Restaurant"
},
{
"name": "Yankee Tavern"
},
{
"name": "Yankee Jz Pizza"
},
{
"name": "Woodlawn Cafe"
},
{
"name": "Wild Asia"
},
{
"name": "Wilbel Pizza"
},
{
"name": "White Castle"
},
{
"name": "The Pizza Place"
},
{
"name": "Rolen Bagels"
}
]
mongoplayground
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/459363.html
上一篇:無法理解前端和后端之間的連接
下一篇:mongodb查詢通配符嵌套物件
