是否可以控制MongoId代?

时间:2013-08-08 03:50:48

标签: php mongodb

以下是该方案。我在MongoDB中存储条目,并在获取每个条目以显示时使用_id作为公共标识符。由于_id相当难以猜测,因此基于URL中的_id访问一个条目的用户无法根据其信息猜测下一个或上一个条目(下面的示例除外)。我也不必在包含md5哈希或uniqid的另一个字段上创建额外的索引。

问题:在导入作业中创建多个条目时,条目变得非常相似_id,因为它们部分基于时间戳。 导入期间创建的三个条目可以看作这样的示例。 52014b1a3c9fb7733d000000 52014b1a3c9fb7733d000001 52014b1a3c9fb7733d000002

在这种情况下,用户可能会看到该模式并尝试编辑每个标识符的最后一部分,并在这种情况下成功查看另一个条目。

我的问题: 是否可以在创建文档时控制MongoId生成,以便在创建大量if条目作为导入时,它不会仅使用最后的递增函数?更改ID的设备部分?可以这样做吗?

我的最后一招是停止使用_id作为条目的公共标识符,迫使我在非常大的集合上设置其他索引。我希望我不必去那里。

我在基于PHP的应用程序中使用MongoDb。

1 个答案:

答案 0 :(得分:1)

您无法更改自动ID生成,因为它是所有驱动程序必须使用的设置算法。但是,您可以自己创建自己的想法,但是每个文档都必须这样做:

<?php
$document = array(
    "_id" => new MongoID("ffb234234....");
);

您需要确保在设置该格式时将24个十六进制字符传递给MongoID的构造函数。但是,如果您这样做,请确保包含PID和散列(主机名),以便保证多个机器和进程之间的唯一性。