2016-10-02 13 views
1

私はPHPと共にMongoDBを使用します。ドキュメントのIDを取得したい場合や、新しいドキュメントを挿入して、挿入されたドキュメントのIDを返す場合があります。存在する場合はドキュメントIDを取得します。存在しない場合は挿入し、挿入されたドキュメントIDを返します。

tagsコレクションは次のように:

[ 
    { 
     "_id": "57b4e71b4535e71816816183", 
     "tag": "tag1" 
    }, 
    { 
     "_id": "57b4e71b4535e7181681612b", 
     "tag": "tag2" 
    } 
] 

私は、タグで検索し、そのIDを取得したり、存在しない場合は、それを挿入したいです。どうすればいいのか教えてください。

答えて

1

あなたは真のオプションnewupsertセットを持っていfindAndModify()更新操作でこれを行うことができます。 newオプションがtrueに設定されていると、更新プログラムに加えられた変更を含む単一のドキュメントが返されます。 trueに設定し、指定upsertオプションで

findAndModify()ないか文書がクエリに一致しないか、クエリに一致する単一のドキュメントを更新した場合、新規ドキュメントを作成します。

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

同等PHP codeは、次のとおりです:

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

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

var_dump($retval); 
+1

は....どうもありがとうございました

次のmongoシェルの例は、この実証します –

関連する問題