我将MongoDB与PHP一起使用。我想得到文件的id,如果它存在或插入一个新文件然后返回插入文件的id。
我的tags
集合如:
[
{
"_id": "57b4e71b4535e71816816183",
"tag": "tag1"
},
{
"_id": "57b4e71b4535e7181681612b",
"tag": "tag2"
}
]
我希望按标签搜索并获取其ID,或者如果不存在则插入它。你能告诉我怎么做吗?
答案 0 :(得分:1)
您可以使用选项new
和upsert
设置为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);