获取文档ID(如果存在)或插入它并返回插入的文档ID(如果它不存在)

时间:2016-10-02 19:29:46

标签: php mongodb

我将MongoDB与PHP一起使用。我想得到文件的id,如果它存在或插入一个新文件然后返回插入文件的id。

我的tags集合如:

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

我希望按标签搜索并获取其ID,或者如果不存在则插入它。你能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:1)

您可以使用选项newupsert设置为true的 findAndModify() 更新操作执行此操作。 new选项设置为true将返回单个文档,其中包含对更新所做的修改。

如果指定的upsert选项设置为true,则 findAndModify() 会在没有与查询匹配的文档时创建新文档,或者更新与查询匹配的单个文档。< / p>

以下mongo shell示例演示了这一点:

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