MongoDB具有唯一值的多个数组

时间:2018-08-15 20:53:11

标签: arrays mongodb unique dynamic-queries

创建模式并以“正确”的方式设置数据库时遇到了一个小难题。我有一个包含包含4个不同数组的对象的集合。收集条目中的对象看起来类似于:

itemInCollection{
    ...
    theObj: {arr1: ["user1685", "user5342"], arr2: ["user1432"], arr3: [], arr4: ["user1632", "user2312", "user6452"]},
    ...
}

我创建的架构已经要求所有数组项都是唯一的,但我也希望所有数组都不包含与另一个数组相同的条目。有时,我还需要将一个数组中已经存在的项移动到另一个数组中(当然,从旧数组中删除该条目,因为所有数组都不应该包含相同的条目)。显然,这不是跟踪此类事件的最佳方法,不是吗?

到目前为止,我有4个查询,它们分别检查每个数组中的某个条目,以及另一个查询,如果没有找到条目,则将该条目添加到相应的数组中。还有另一个查询,它会删除可能在将其添加到另一个数组之前已经在另一个容器中找到了。

是否有更好的方法来设置数据库来跟踪此类事件?还是有动态查询多个数组的方法,而不是使用6-7个不同的查询?

在此先感谢大家的时间和帮助:)

1 个答案:

答案 0 :(得分:2)

您可以将“用户”数据构造为子文档,而不是像这样的字符串:

itemInCollection{
    ...
    theObj: [
        { userid: "user1685", type: "arr1" },
        { userid: "user5342", type: "arr1" },
        { userid: "user1432", type: "arr2" },
        { userid: "user1632", type: "arr4" },
        { userid: "user2312", type: "arr4" },
        { userid: "user6452", type: "arr4" }
    ],
    ...
}

有了这种结构,应该更容易确保唯一性(不幸的是,在现阶段,无法确保数组内特定字段的唯一性-请参见this link)。