我正在尋找重組我的 MongoDB 集合,但一直未能這樣做。我對它很陌生,正在尋找一些幫助。我正在努力訪問“itemsList”欄位中的移動資料。
我的收藏檔案目前的結構如下:
{
"_id": 1,
"pageName": "List of Fruit",
"itemsList":[
{
"myID": 101,
"itemName": "Apple"
},
{
"myID": 102,
"itemName": "Orange"
}
]
},
{
"_id": 2,
"pageName": "List of Computers",
"itemsList":[
{
"myID": 201,
"itemName": "MacBook"
},
{
"myID": 202,
"itemName": "Desktop"
}
]
}
最終結果
但我希望重新構造資料,以便“itemName”的值是它自己的檔案。
我還想將“myID”的名稱更改為“itemID”。
并將新檔案保存到另一個集合。
{
"_id": 1,
"itemName": "Apple",
"itemID": 101,
"pageName": "List of Fruit"
},
{
"_id": 2,
"itemName": "Orange",
"itemID": 102,
"pageName": "List of Fruit"
},
{
"_id": 3,
"itemName": "MacBook",
"itemID": 201,
"pageName": "List of Computers"
},
{
"_id": 4,
"itemName": "Desktop",
"itemID": 202,
"pageName": "List of Computers"
}
我試過的
我曾嘗試使用 MongoDB 的聚合功能,但因為每個檔案中有多個“itemName”欄位,它會將它們都添加到一個陣列中 - 而不是每個檔案中一個。
db.collection.aggregate([
{$Project:{
itemName: "$itemsList.itemName",
itemID: "$itemsList.otherID",
pageName: "$pageName"
}},
{$out: "myNewCollection"}
])
我也嘗試過使用 PyMongo 3.x 來遍歷檔案的欄位并另存為新檔案,但沒有成功。
實作方式
我愿意使用 MongoDB 的聚合功能,如果它可以將這些專案移動到它們自己的檔案或 Python 腳本 (3.x) - 或您認為可以提供幫助的任何其他方式。
在此先感謝您的幫助!
uj5u.com熱心網友回復:
你只需要一個$unwind來“打破”陣列。然后您可以進行一些資料整理并輸出到您的集合。
請注意,由于您沒有指定_id. 您可能需要進行額外處理。下面的演示使用本機_id生成,它將自動分配 ObjectId。
db.collection.aggregate([
{
"$unwind": "$itemsList"
},
{
"$project": {
"_id": 0,
"itemName": "$itemsList.itemName",
"itemID": "$itemsList.myID",
"pageName": "$pageName"
}
},
{
$out: "myNewCollection"
}
])
這是Mongo 游樂場供您參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326758.html
標籤:Python MongoDB 聚合框架 皮蒙戈 pymongo-3.x
下一篇:根據條件在MongoDB中分組
