MongoDB多維陣列的更新操作
阿新 • • 發佈:2018-12-24
最近專案中遇到了MongoDB集合中多維陣列的更新操作,由於MongoDB中陣列定位符$僅支援一維陣列,對於多維陣列不支援,通過查閱資料並測試研究,得出了一種解決方式,具體操作如下所示:
假設存在如下集合:
{
"_id" : ObjectId("559e3683ff6788885b85ed86"),
"name" : "China",
"province" : [{
"name" : "SC",
"city" : [{
"name" : "CD"
}, {
"name" : "MY"
}]
}, {
"name" : "SD",
"city" : [{
"name" : "JN"
}, {
"name" : "TA"
}]
}]
}
如果我們想要為SC省中的CD市增加一個別名,即進行更新操作,由於$定位符在多維陣列中不支援,因此我採取的方式是先得到欲更新省市的下標,然後利用下標的方式進行的更新,程式碼如下(使用的pymongo):
mongodb = MongoClient('127.0.0.1')collection = mongodb.test.country
result = list(collection.find({"name":"China"}))[0]
province = result.get('province')
for i in range(len(province)):
if province[i].get('name') == "SC":
city = province[i].get('city')
for j in range(len(city)):
if city[j].get('name') == 'CD':
collection.update_one({"name":"China"},{"$set":{"province.%s.city.%s.alias"%(i,j):"cd"}})
ps:由於索引位置需要通過計算,因此該方式效率並不是很高,只是提供一種可以解決問題的方案而已。