Mongodb重新排列或移动集合中字段的值
我有一个小任务集合,每个任务都有自己的执行优先级。我希望能够插入具有给定优先级的新任务,或将任务移动到不同优先级 这些行动应使其他优先事项相互协调。 我使用的是mongodb+python(pymongo),我的问题是有没有一种方法可以(有效地)使用mongodb本身来实现这一点,或者我最好以编程的方式来实现,然后更新所有记录 例如,我们从以下一组任务开始:Mongodb重新排列或移动集合中字段的值,mongodb,pymongo,Mongodb,Pymongo,我有一个小任务集合,每个任务都有自己的执行优先级。我希望能够插入具有给定优先级的新任务,或将任务移动到不同优先级 这些行动应使其他优先事项相互协调。 我使用的是mongodb+python(pymongo),我的问题是有没有一种方法可以(有效地)使用mongodb本身来实现这一点,或者我最好以编程的方式来实现,然后更新所有记录 例如,我们从以下一组任务开始: [ {'name': 'task_a', 'priority': 1}, {'name': 'task_b', 'prio
[
{'name': 'task_a', 'priority': 1},
{'name': 'task_b', 'priority': 2},
{'name': 'task_c', 'priority': 3},
]
现在,如果我添加另一个任务,请说:{'name':'task_d','priority':2}
。
我需要我的收藏看起来像这样(优先级相应更新):
或者,如果我将任务的优先级更改为更高或更低,可以说:task\u a->3
我需要我的集合如下所示:
[
{'name': 'task_a', 'priority': 3},
{'name': 'task_d', 'priority': 1},
{'name': 'task_b', 'priority': 2},
{'name': 'task_c', 'priority': 4},
]
你可以这样做
db.collection.update({
"name": "task_d"
},
{
"$set": {
"name": "task_d",
"priority": 1
}
},
{
"multi": false,
"upsert": true,
"$sort": {
"name": 1
}
})
如果是这么简单的话:)我已经用你的json示例试过了,你自己也可以做,请注意
优先级
字段的值。这与名称
无关。据我所知,如果存在优先级为1的任务,则应排在第二位,优先级为2的任务应排在第一位?不,这与顺序无关(顺序根本不重要),而是与字段优先级
的值有关。
db.collection.update({
"name": "task_d"
},
{
"$set": {
"name": "task_d",
"priority": 1
}
},
{
"multi": false,
"upsert": true,
"$sort": {
"name": 1
}
})