Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb重新排列或移动集合中字段的值_Mongodb_Pymongo - Fatal编程技术网

Mongodb重新排列或移动集合中字段的值

Mongodb重新排列或移动集合中字段的值,mongodb,pymongo,Mongodb,Pymongo,我有一个小任务集合,每个任务都有自己的执行优先级。我希望能够插入具有给定优先级的新任务,或将任务移动到不同优先级 这些行动应使其他优先事项相互协调。 我使用的是mongodb+python(pymongo),我的问题是有没有一种方法可以(有效地)使用mongodb本身来实现这一点,或者我最好以编程的方式来实现,然后更新所有记录 例如,我们从以下一组任务开始: [ {'name': 'task_a', 'priority': 1}, {'name': 'task_b', 'prio

我有一个小任务集合,每个任务都有自己的执行优先级。我希望能够插入具有给定优先级的新任务,或将任务移动到不同优先级

这些行动应使其他优先事项相互协调。 我使用的是mongodb+python(pymongo),我的问题是有没有一种方法可以(有效地)使用mongodb本身来实现这一点,或者我最好以编程的方式来实现,然后更新所有记录

例如,我们从以下一组任务开始:

[
    {'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
  }
})