使用 MongoDB 订购待办事项列表

5 mongodb

我正在尝试使用 Javascript、Python 和 MongoDB 创建自己的待办事项列表。我陷入了如何处理任务排序的困境。

我当前的想法是在每个任务文档中都有一个订单字段,当客户端上的订单发生变化时,我将从数据库中获取任务列表并单独/按顺序重新排序每个任务。这看起来很尴尬,因为大的待办事项列表意味着大量的查询。有没有办法顺序更新多个文档中的字段?

我也在寻求建议,看看这是否是最好的方法。我希望能够维持待办事项列表的顺序,但也许我的处理方式是错误的。

{
  "_id" : ObjectId("50a658f2cace55034c68ce95"),
  "order" : 1,
  "title" : "task1",
  "complete" : 0
}

{
  "_id" : ObjectId("50a658fecace55034c68ce96"),
  "order" : 2,
  "title" : "task2",
  "complete" : 1
}

{
  "_id" : ObjectId("50a65907cace55034c68ce97"),
  "order" : 3,
  "title" : "task3",
  "complete" : 1
}

{
  "_id" : ObjectId("50a65911cace55034c68ce98"),
  "order" : 4,
  "title" : "task4",
  "complete" : 0
}

{
  "_id" : ObjectId("50a65919cace55034c68ce99"),
  "order" : 5,
  "title" : "task5",
  "complete" : 0
}
Run Code Online (Sandbox Code Playgroud)

sne*_*nez 2

Mongo 的查询速度非常快,您不应该像使用功能齐全的关系数据库那样关心性能。如果你想谨慎一点,只需创建一个包含 1k 项的待办事项列表并尝试一下,它应该很快就会完成。

for (var i = 0; i < orderedListOfIds.length; i++)
{
  db.collection.update({ '_id': orderedListOfIds[i] }, { $set: { order:i } })
}
Run Code Online (Sandbox Code Playgroud)

然后

db.collection.find( { } ).sort( { order: 1 } )
Run Code Online (Sandbox Code Playgroud)