Как создать поле автоинкремента - PullRequest
1 голос
/ 29 марта 2012

Я хочу добавить значение автоинкремента в поле в mongodb, используя php, без подсчета записей, и следующее значение (count + 1) будет моим значением приращения ... Или есть ли способ создать массив значений автоинкремента в mongodb, php, например. Клиент, имеющий несколько адресов электронной почты и адресов, затем мы можем сохранить его как email[{1:'a@x.com',2:'demo@example.com'},...], а также для address[{1:'Indore',2:'Dewas'},...] Так что для уникальности хочу установить значение автоинкремента для каждого электронного письма и адреса.

Ответы [ 4 ]

2 голосов
/ 26 сентября 2013

Возможно, если вы создадите две коллекции

Сначала , чтобы сохранить поле, для которого вы хотите создать номер автоинкремента как

// 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"
});

findAndModify () может не работать, пока код использует PHP , тогда вы можете использовать find () и / или update ()

См. Документы для поле создания с автоинкрементом

0 голосов
/ 14 августа 2018

Это мой метод создания идентификатора автоинкремента в PHP-библиотеке MongoDB:

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;
        }
    }
0 голосов
/ 06 марта 2017

Возможно, нам нужно получить коллекцию макс. Идентификаторов

db -> collection -> find () -> sort (array ('id' => -1)) -> limit (1)

Возвращает массив максимального идентификатора. Добавить базу данных ['id'] + 1;

Каждый раз, когда нет необходимости хранить идентификатор автоматического приращения в монго

0 голосов
/ 29 марта 2012

В идеале не следует использовать автоинкремент в качестве идентификатора в MongoDb.Если хотите, обратитесь к двум хорошим методам, приведенным здесь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...