如何创建自动增量字段

时间:2012-03-29 08:41:59

标签: php mongodb

我想使用php在mongodb的字段中添加自动增量值,而不使用计数记录,下一个数字(count + 1)将是我的增量值... 或者是否有任何方法可以在mongodbphp中创建自动增量值数组,例如,客户拥有多个电子邮件和地址,然后我们可以将其存储为email[{1:'a@x.com',2:'demo@example.com'},...],也可以存储为{{1}因此,对于唯一性,我想从每个电子邮件和地址设置自动增量值..

4 个答案:

答案 0 :(得分:2)

如果您创建两个collections

,则可以

首先存储您要为其创建自动增量号的字段

// Inserting 2 records for which we want to create auto-increment numbers
db.autoincrementcollection.insert({
   field_id: "register_id",
   nextId: 0
},
{
   field_id: "user_id",
   nextId: 0
});

// Function is used to get the next autoincremented value
function getNextId(field)
{
   var ret = db.autoincrementcollection.findAndModify({
        query: { field_id: field },
        update: { $inc: { nextId: 1 } },
        new: true
   });    
   return ret.nextId;
}

第二,您希望使用增加的数字,如

// inserting data in registration collection with register_id auto-increment number
db.registration.insert({
     _id: getNextId("register_id"),
     fname: "Rohan",
     lname:"Kumar"
});
// inserting data in user collection with user_id auto-increment number
db.users.insert({
     _id: getNextId("user_id"),
     name: "Rohan Kumar"
});
使用 PHP 的代码时,

findAndModify()可能无效,那么您可以使用find()和/或update()

请参阅create-an-auto-incrementing-field

文档

答案 1 :(得分:0)

理想情况下,您不应将自动增量用作MongoDb中的标识符。 如果您愿意,请参考此处给出的2个好方法:

http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

答案 2 :(得分:0)

我们可能必须获得最大ID表格集合

db - >收藏 - > find() - > sort(array('id'=> -1)) - >限制(1)

返回最大id数组。添加db ['id'] + 1;

每次都不需要在mongo中存储自动增量ID

答案 3 :(得分:0)

这是我在MongoDB PHP库中创建自动增量ID的方法:

private function get_last_id()
    {
        // put your connection string blow
        $client = new MongoDB\Client('');
        $counterCollection = $client->collection->counter;
        $counter["id"]=1;
        if ($counterCollection->count()<=0) {
            $insertOneResult = $counterCollection->insertOne($counter);
        } else {
            $filter  = [];
            $options = ['sort' => ['_id' => -1], 'limit' => 1];
            $doc = $counterCollection->findOne($filter, $options);
            $id=$doc->id+1;
            $updateResult = $counterCollection->updateOne(
            [ '_id' => $doc->_id ],
            [ '$set' => [ 'id' =>$id ]]
        );
            return $id;
        }
    }