sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB - hur man infogar en post med hjälp av autoincrement-funktionalitet

Du måste lägga till _id-fältet i $location. Och _id måste du inkludera id.Exempel:

function add_playbook_history_record($location)
{
        $m = new MongoClient("mongodb://10.1.1.111:27017");
        $db = $m->testdb;
        $collection = $db->testcollection;
        $location['_id'] = getNextSequence('playhistid')
        $cursor = $collection->insert($location);
}

Min rekommendation:lägg till upsert i findAndModify

Det kommer att fungera för dig:

    function getNextSequence($name)
    {
        $m = new MongoClient("mongodb://10.1.1.111:27017"); // In a real project, you do not need all the time to re-create the connection
        $db = $m->testdb;
        $collection = $db->counters;
        $result =  $collection->findAndModify(
            ['_id' => $name],
            ['$inc' => ['seq' => 1]],
            ['seq' => true],
            ['new' => true, 'upsert' => true]
        );
        if (isset($result['seq']))
        {
            return $result['seq'];
        }
        else
        {
            return false;
        }
    }

I ett riktigt projekt behöver du inte hela tiden för att återskapa anslutningen

Du kan skapa MongoDatabasen (detta mönster singelton)

class MongoDatabase{
    private function __construct(){}
    public static function getInstance(){...} // return MongoClient
} 

och anropsbehovsmetod

MongoDatabase::getInstance()->selectCollection('counters')->findAndModify(...)


  1. Hitta skärningspunkten mellan två samlingar i MongoDb

  2. Mongoose anslutning till replik set

  3. Mongoose:Hur befolkar man en djup befolkning på två nivåer utan att befolka fält på första nivån? i mongodb

  4. Testa ett filter på ett dokument på klientsidan