如果存在则获取文档id,如果不存在则插入文档id并返回插入的文档id


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

我使用MongoDB与PHP在一起。我想获取文档的id,如果它存在,或者插入一个新文档,然后返回插入文档的id。

我的tags收藏像:

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

我想通过标签搜索并获得其id或插入它,如果不存在。你能告诉我怎么做吗?

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

如果指定的upsert选项设置为true, findAndModify() 如果没有文档匹配查询,则创建一个新文档,或者更新一个匹配查询的单个文档。

下面的mongo shell示例演示了这一点:
var doc = { "tag": "tag3" };
var retval = db.tags.findAndModify({
    "query": doc,
    "update": { "$set": doc },
    "new": true, 
    "upsert": true
});    
printjson(retval._id)

等效的PHP 代码如下:
$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);