2011-10-05 51 views
0

MongoDB中有findAndModify命令来使用自动递增数字而不是默认ID,但我不知道如何将它用于PHP驱动程序(我不确定它是否支持在所有)。MongoDB中ID的序列号

+0

在分布式环境中很难生成增量ID。我建议使用唯一生成的id,如objectId而不是增量。 –

+0

问题是我想将它们用于网络文章,而长ID将成为我网址的一部分,这并不是很好。这就是我希望使用类似sql的auto_increment的原因primary_key – Googlebot

+0

MB This post - > http://shiflett.org/blog/2010/jul/auto-increment-with-mongodb会帮助你。但我认为objectId看起来好,即使在URL中) –

回答

2

好吧,如果你需要存储增量值,我建议你使用其他字段而不是mongodb _id字段mongodb使用这些生成的id返回一些(我相信很多,如果不是全部的话)类型的查询,特别是如果你有一个多集群设置,那么它肯定会使用_id字段来定位数据所在的物理磁盘(我相信使用散列表或某种这样的技术 - 并不完全与mongo内核的引擎盖下操作一致)。简而言之,请将其设计为一个自动生成的参考字段。

0
<?php 
$m = new MongoClient(); 

// select a database 
$db = $m->seq; 

// select a collection (analogous to a relational database's table) 
$collection = $db->counters; 
$user_collection = $db->user; 



/**********Function to auto increment seq************/ 
function getNextSequence($name){ 
global $collection; 

$retval = $collection->findAndModify(
    array('_id' => $name), 
    array('$inc' => array("seq" => 1)), 
    null, 
    array(
     "new" => true, 
    ) 
); 
return $retval['seq']; 
} 

$db_array=array('_id' => getNextSequence("userid"), 'name' => 'debojit'); 

$user_collection->insert($db_array);