【问题标题】:Get document id if it exists or insert it and return inserted document id if it does not exist如果存在则获取文档 id 或插入它,如果不存在则返回插入的文档 id
【发布时间】:2017-02-10 18:15:59
【问题描述】:

我将 MongoDB 与 PHP 一起使用。我想获取文档的 ID(如果存在)或插入一个新文档然后返回插入的文档的 ID。

我的tags 收藏喜欢:

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

我想按标签搜索并获取它的 id,如果不存在则插入它。你能告诉我我该怎么做吗?

【问题讨论】:

    标签: php mongodb


    【解决方案1】:

    您可以通过将选项newupsert 设置为true 的findAndModify() 更新操作来执行此操作。 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 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 2013-08-14
      • 2020-07-09
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多