Mongodb mobngoDB:按组设置顺序值

Mongodb mobngoDB:按组设置顺序值,mongodb,Mongodb,我有一个包含文档的集合,这些文档有一个指示其顺序的索引属性和一个组属性: { "item": "A1", "group": "A", "index": 1 } { "item": "A2", "group": "A", "index": 2 } { "item": "B1", "group": "B", "index": 3 } { "item": "B2", "group": "B", "index

我有一个包含文档的集合,这些文档有一个指示其顺序的索引属性和一个组属性:

{
    "item": "A1",
    "group": "A",
    "index": 1
}
{
    "item": "A2",
    "group": "A",
    "index": 2
}
{
    "item": "B1",
    "group": "B",
    "index": 3
}
{
    "item": "B2",
    "group": "B",
    "index": 4
}
{
    "item": "C1",
    "group": "C",
    "index": 5
} 
{
    "item": "C2",
    "group": "C",
    "index": 6
} 
现在,a希望根据组的顺序分配新的索引值:例如,[B,C,a]应导致:

{
    "item": "B1",
    "group": "B",
    "index": 1
}
{
    "item": "B2",
    "group": "B",
    "index": 2
}
{
    "item": "C1",
    "group": "C",
    "index": 3
} 
{
    "item": "C2",
    "group": "C",
    "index": 4
} 
{
    "item": "A1",
    "group": "A",
    "index": 5
}
{
    "item": "A2",
    "group": "A",
    "index": 6
}

有没有一种方法可以在一个update语句中实现这一点,或者我必须分别为每个文档运行一个查询?同样重要的是,组内的初始顺序不能更改。

当然,这不能在一个update语句中执行,因为所有文档都将收到一个新的“索引”值,这对于每个文档都是不同的。是更新的最佳方法。这里的顺序遵循排序的基本规则,即
{“group”:1,“item”:1}
,按升序排列,先是“group”,然后是“item”。如果简单的排序规则就足够了,您可能还需要考虑更新这个索引的目的。我的实际数据并不像上面的示例那样结构化。项目和组值可以包含任何值,用户稍后还可以手动重新排序文档。(即,具有相同组的项目最终可能不会在整个集合中保持在一起)。所以我想批量操作是我最好的选择。与在不使用批量操作的情况下单独更新每个文档相比,性能是否有显著提升?批量的基本概念是“批量”操作(内部协议限制为1000,但这是透明处理的。仍然最好保持批量大小或更小)在一个请求中发送到服务器,并返回一个响应。在不使用“批量”操作的情况下,每个更新都是对服务器的一个请求,您通常也在服务器上等待响应。因此,是的,通过使用它可以显著降低开销。