user3822551 user3822551 - 1 year ago 83
PHP Question

Get document id if it exists or insert it and return inserted document id if it does not exist

I use MongoDB together with PHP. I want to get id of document if it exists or insert a new document then return the id of inserted document.


collection like:

"_id": "57b4e71b4535e71816816183",
"tag": "tag1"
"_id": "57b4e71b4535e7181681612b",
"tag": "tag2"

I want to search by tag and get its id or insert it if does not exist. Could you please tell me how I can do that?

Answer Source

You can do this with the findAndModify() update operation that has the options new and upsert set to true. The new option set to true will return a single document with with the modifications made on the update.

With the specified upsert option set to true, findAndModify() either creates a new document if no documents match the query or updates a single document that matches the query.

The following mongo shell example demonstrates this:

var doc = { "tag": "tag3" };
var retval = db.tags.findAndModify({
    "query": doc,
    "update": { "$set": doc },
    "new": true, 
    "upsert": true

The equivalent PHP code follows:

$m = new Mongo;
$col = $m->selectDB("test")->tags;
$doc = array("tag" => "tag3");

$retval = $col->findAndModify(
    array("$set" => $doc),
        "upsert" => true,
        "new" => true,