MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB - jak wstawić rekord za pomocą funkcji autoinkrementacji

Musisz dodać pole _id w $location.I _id musi zawierać id.Przykład:

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

Moja rekomendacja:dodaj upsert w findAndModify

To zadziała dla Ciebie:

Funkcja
    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;
        }
    }

W prawdziwym projekcie nie musisz cały czas odtwarzać połączenia

Możesz utworzyć bazę danych MongoDatabase (ten wzór singelton)

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

i wywołaj metodę potrzebną

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo MapReduce wybierz ostatnią datę

  2. Najlepszy model do przedstawiania relacji wiele do wielu za pomocą atrybutów w MongoDB

  3. Mongo otwiera zbyt wiele połączeń

  4. pymongo + gevent:rzuć mi banana i po prostu monkey_patch?

  5. Błąd obsługi MongoDB podczas wstawiania w Javie