我的应用程序有一个游戏列表。每个游戏都有一个位置(以向用户显示的顺序:1,2,3 ......)。
我使用MongoDB来保存所有数据。好的,现在我以4号位的比赛为例。我想将它改为位置1.那么我需要做什么?
我需要在MongoDB中将此游戏的字段位置从4更新为1,并对位于第1位之后的此集合中的所有文档进行增量。
但我认为这不是一个好主意!您可能有想法如何以更好的方式实施它?谢谢!
mongo表的示例:
_id | name | description | position |
________________________________________________________
ObjectId("...") | bubble | some description | 1
ObjectId("...") | bubbleA | some description | 2
ObjectId("...") | bubbleB | some description | 3
ObjectId("...") | bubbleC | some description | 4
ObjectId("...") | bubbleD | some description | 5
ObjectId("...") | bubbleE | some description | 6
ObjectId("...") | bubbleF | some description | 7
现在,在我的网站中,我按顺序显示游戏:bubble - > bubbleA - > bubbleB - > bubbleC ... 现在我想按顺序在我的网站游戏中显示:bubbleC - > bubbleA - > bubbleB - >气泡... 所以要做到这一点我需要更新"位置"我的表格中的字段为" bubbleC"到" 1",并增加所有其他"位置"对于名称为" bubble"的文档之后的所有文档。但这不是一个好主意。那么如何更好地做到这一点?
答案 0 :(得分:1)
如果您的文件数量相对较少且不会改变很多位置,那么您的方法并不是那么糟糕。
作为替代方案,您可以将位置元数据存储在单独的数组中。职位更新只会触及一个文件。基本Python示例:
def move(positions, old_index, new_index):
element = positions.pop(old_index)
positions.insert(new_index, element)
return positions
# Fetch array from MongoDB (or from anywhere really)
positions = [
{ '_id': 'ObjectId("...")', 'name': "bubble", 'description': "some description" },
{ '_id': 'ObjectId("...")', 'name': "bubbleA", 'description': "some description" },
{ '_id': 'ObjectId("...")', 'name': "bubbleB", 'description': "some description" },
{ '_id': 'ObjectId("...")', 'name': "bubbleC", 'description': "some description" },
{ '_id': 'ObjectId("...")', 'name': "bubbleD", 'description': "some description" },
{ '_id': 'ObjectId("...")', 'name': "bubbleE", 'description': "some description" },
{ '_id': 'ObjectId("...")', 'name': "bubbleF", 'description': "some description" }
]
old_index = 3
new_index = 0
move(positions, old_index, new_index)
# New positions:
#
# [{'_id': 'ObjectId("...")', 'description': 'some description', 'name': 'bubbleC'}, <--
# {'_id': 'ObjectId("...")', 'description': 'some description', 'name': 'bubble'},
# {'_id': 'ObjectId("...")', 'description': 'some description', 'name': 'bubbleA'},
# {'_id': 'ObjectId("...")', 'description': 'some description', 'name': 'bubbleB'},
# {'_id': 'ObjectId("...")', 'description': 'some description', 'name': 'bubbleD'},
# {'_id': 'ObjectId("...")', 'description': 'some description', 'name': 'bubbleE'},
# {'_id': 'ObjectId("...")', 'description': 'some description', 'name': 'bubbleF'}]
编写一个小帮助函数有助于按_id
或name
移动元素。