努力前行 發表於 2019-7-4 19:37:00

PHP7 MongoDB 使用方法

<p><span class="smtitle"><span class="smtitle">原文链接:&nbsp;</span></span>http://www.zhaokeli.com/article/8574.html</p>
<div class="smcon">
<h1>MongoDb原生操作</h1>

<h2>Mongodb连接</h2>
<p>PHP7 连接 MongoDB 语法如下:</p>
复制代码
<pre class="php hljs inited">$manager&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\Manager(<span class="hljs-string">"mongodb://localhost:27017");</span></span></pre>

<h2>插入数据</h2>
<p>将 name 为"自学教程" 的数据插入到 test 数据库的 runoob 集合中。</p>
复制代码
<pre class="php hljs inited">$bulk&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\BulkWrite;
$document&nbsp;=&nbsp;[<span class="hljs-string">'_id'&nbsp;=&gt;&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\BSON\ObjectID,&nbsp;<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'菜鸟教程'];
&nbsp;
$_id=&nbsp;$bulk-&gt;insert($document);
&nbsp;
var_dump($_id);
&nbsp;
$manager&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\Manager(<span class="hljs-string">"mongodb://localhost:27017");&nbsp;&nbsp;
$writeConcern&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY,&nbsp;<span class="hljs-number">1000);
$result&nbsp;=&nbsp;$manager-&gt;executeBulkWrite(<span class="hljs-string">'test.runoob',&nbsp;$bulk,&nbsp;$writeConcern);</span></span></span></span></span></span></span></span></span></span></pre>

<h2>读取数据</h2>
复制代码
<pre class="php hljs inited">$manager&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\Manager(<span class="hljs-string">"mongodb://localhost:27017");&nbsp;&nbsp;
&nbsp;
<span class="hljs-comment">//&nbsp;插入数据
$bulk&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\BulkWrite;
$bulk-&gt;insert([<span class="hljs-string">'x'&nbsp;=&gt;&nbsp;<span class="hljs-number">1,&nbsp;<span class="hljs-string">'name'=&gt;<span class="hljs-string">'baidu',&nbsp;<span class="hljs-string">'url'&nbsp;=&gt;&nbsp;<span class="hljs-string">'http://www.baidu.com']);
$bulk-&gt;insert([<span class="hljs-string">'x'&nbsp;=&gt;&nbsp;<span class="hljs-number">2,&nbsp;<span class="hljs-string">'name'=&gt;<span class="hljs-string">'Google',&nbsp;<span class="hljs-string">'url'&nbsp;=&gt;&nbsp;<span class="hljs-string">'http://www.google.com']);
$bulk-&gt;insert([<span class="hljs-string">'x'&nbsp;=&gt;&nbsp;<span class="hljs-number">3,&nbsp;<span class="hljs-string">'name'=&gt;<span class="hljs-string">'taobao',&nbsp;<span class="hljs-string">'url'&nbsp;=&gt;&nbsp;<span class="hljs-string">'http://www.taobao.com']);
$manager-&gt;executeBulkWrite(<span class="hljs-string">'test.sites',&nbsp;$bulk);
&nbsp;
$filter&nbsp;=&nbsp;[<span class="hljs-string">'x'&nbsp;=&gt;&nbsp;[<span class="hljs-string">'$gt'&nbsp;=&gt;&nbsp;<span class="hljs-number">1]];
$options&nbsp;=&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'projection'&nbsp;=&gt;&nbsp;[<span class="hljs-string">'_id'&nbsp;=&gt;&nbsp;<span class="hljs-number">0],
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'sort'&nbsp;=&gt;&nbsp;[<span class="hljs-string">'x'&nbsp;=&gt;&nbsp;<span class="hljs-number">-1],
];
&nbsp;
<span class="hljs-comment">//&nbsp;查询数据
$query&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\Query($filter,&nbsp;$options);
$cursor&nbsp;=&nbsp;$manager-&gt;executeQuery(<span class="hljs-string">'test.sites',&nbsp;$query);
&nbsp;
<span class="hljs-keyword">foreach&nbsp;($cursor&nbsp;as&nbsp;$document)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;print_r($document);
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>

<h2>更新数据</h2>
复制代码
<pre class="php hljs inited">$bulk&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\BulkWrite;
$bulk-&gt;update(
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'x'&nbsp;=&gt;&nbsp;<span class="hljs-number">2],
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'$set'&nbsp;=&gt;&nbsp;[<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'菜鸟工具',&nbsp;<span class="hljs-string">'url'&nbsp;=&gt;&nbsp;<span class="hljs-string">'tool.runoob.com']],
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'multi'&nbsp;=&gt;&nbsp;<span class="hljs-keyword">false,&nbsp;<span class="hljs-string">'upsert'&nbsp;=&gt;&nbsp;<span class="hljs-keyword">false]
);
&nbsp;
$manager&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\Manager(<span class="hljs-string">"mongodb://localhost:27017");&nbsp;&nbsp;
$writeConcern&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY,&nbsp;<span class="hljs-number">1000);
$result&nbsp;=&nbsp;$manager-&gt;executeBulkWrite(<span class="hljs-string">'test.sites',&nbsp;$bulk,&nbsp;$writeConcern);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>

<h2>删除数据</h2>
复制代码
<pre class="php hljs inited">$bulk&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\BulkWrite;
$bulk-&gt;delete([<span class="hljs-string">'x'&nbsp;=&gt;&nbsp;<span class="hljs-number">1],&nbsp;[<span class="hljs-string">'limit'&nbsp;=&gt;&nbsp;<span class="hljs-number">1]);&nbsp;&nbsp;&nbsp;<span class="hljs-comment">//&nbsp;limit&nbsp;为&nbsp;1&nbsp;时,删除第一条匹配数据
$bulk-&gt;delete([<span class="hljs-string">'x'&nbsp;=&gt;&nbsp;<span class="hljs-number">2],&nbsp;[<span class="hljs-string">'limit'&nbsp;=&gt;&nbsp;<span class="hljs-number">0]);&nbsp;&nbsp;&nbsp;<span class="hljs-comment">//&nbsp;limit&nbsp;为&nbsp;0&nbsp;时,删除所有匹配数据
&nbsp;
$manager&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\Manager(<span class="hljs-string">"mongodb://localhost:27017");&nbsp;&nbsp;
$writeConcern&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY,&nbsp;<span class="hljs-number">1000);
$result&nbsp;=&nbsp;$manager-&gt;executeBulkWrite(<span class="hljs-string">'test.sites',&nbsp;$bulk,&nbsp;$writeConcern);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>

<h1>MongoDB官方操作库</h1>
<p>看完上面的CURD操作是不是感觉有点懵逼,操作方式跟想像中的完全不一样,<img src="http://img.baidu.com/hi/tsj/t_0038.gif">可能官方也想到啦这一块,于是又封装啦一个操作库让大家使用。文档地址如下</p>
<p>https://docs.mongodb.com/php-library/current/tutorial/crud/</p>

<h2>安装</h2>
复制代码
<pre class="bash hljs inited">composer&nbsp;<span class="hljs-keyword">require&nbsp;mongodb/mongodb</span></pre>

<h2>添加数据</h2>

<h3>插入单条数据</h3>
<p>在数据库test中的users集合中插入数据,如果数据库或集合不存在则会自动创建</p>
复制代码
<pre class="php hljs inited">$collection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$insertOneResult&nbsp;=&nbsp;$collection-&gt;insertOne([
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin',
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'email'&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin@example.com',
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'name'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;<span class="hljs-string">'Admin&nbsp;User',
]);
printf(<span class="hljs-string">"Inserted&nbsp;%d&nbsp;document(s)\n",&nbsp;$insertOneResult-&gt;getInsertedCount());
var_dump($insertOneResult-&gt;getInsertedId());</span></span></span></span></span></span></span></span></pre>
<p>输出结果</p>
<p><img title="image.png" alt="1905281559025619827923.png" data-src="https://res.zkeli.com/uploads/image/2019/05/1905281559025619827923.png"></p>
<p>数据库中数据</p>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559025567787873.png"></p>
<p>可以看出返回$oid为数据库自动分配的唯一标识,如果我们插入的时候传入id值的话,mongodb会判断这个id是否存在,如果存在就会报错,如果不存在则直接返回传入的id值</p>
复制代码
<pre class="php hljs inited">$collection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$insertOneResult&nbsp;=&nbsp;$collection-&gt;insertOne([<span class="hljs-string">'_id'&nbsp;=&gt;&nbsp;<span class="hljs-number">1,&nbsp;<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'Alice']);
printf(<span class="hljs-string">"Inserted&nbsp;%d&nbsp;document(s)\n",&nbsp;$insertOneResult-&gt;getInsertedCount());
var_dump($insertOneResult-&gt;getInsertedId());</span></span></span></span></span></span></pre>
<p>执行结果</p>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559025985889303.png"></p>

<h3>插入多条数据</h3>
复制代码
<pre class="php hljs inited">$collection&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$insertManyResult&nbsp;=&nbsp;$collection-&gt;insertMany([
&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'email'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin@example.com',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'Admin&nbsp;User',
&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'test',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'email'&nbsp;=&gt;&nbsp;<span class="hljs-string">'test@example.com',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'Test&nbsp;User',
&nbsp;&nbsp;&nbsp;&nbsp;],]);
printf(<span class="hljs-string">"Inserted&nbsp;%d&nbsp;document(s)\n",&nbsp;$insertManyResult-&gt;getInsertedCount());
var_dump($insertManyResult-&gt;getInsertedIds());</span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559026233129220.png"></p>

<h2>查询数据</h2>
<p>如果要使用id查询,则需要使用下面的ObjectId类来封装下传进去</p>

<h3>使用自增id查询</h3>
复制代码
<pre class="php hljs inited">$collection&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;<span class="hljs-keyword">new&nbsp;\MongoDB\BSON\ObjectId(<span class="hljs-string">'5cecd708ab4e4536fc0076e2');
$document&nbsp;&nbsp;&nbsp;=&nbsp;$collection-&gt;findOne([<span class="hljs-string">'_id'&nbsp;=&gt;&nbsp;$id]);
var_dump($document);</span></span></span></span></pre>

<h3>其它条件查询</h3>
<p>使用其它条件数据则直接传进去就可以&nbsp;</p>
复制代码
<pre class="php hljs inited">$collection&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$document&nbsp;&nbsp;&nbsp;=&nbsp;$collection-&gt;findOne([<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin']);
var_dump($document);</span></span></span></pre>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559027257136568.png"></p>

<h3>使用limit,sort,skip查询</h3>
<p>默认情况下是返回所有的字段数据,也可以指定字段返回,limit是返回的行数,sort是使用name字段-1为降序,1为升序,skip为跳过前多少条数据如下</p>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$cursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;$collection-&gt;find(
&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin',
&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'projection'&nbsp;=&gt;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'email'&nbsp;=&gt;&nbsp;<span class="hljs-number">1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'limit'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;<span class="hljs-number">4,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'sort'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;[<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-number">-1],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'skip'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;<span class="hljs-number">1,
&nbsp;&nbsp;&nbsp;&nbsp;]);
<span class="hljs-keyword">foreach&nbsp;($cursor&nbsp;as&nbsp;$restaurant)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($restaurant);
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h3>正则条件查询</h3>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$cursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;$collection-&gt;find(
&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-keyword">new&nbsp;MongoDB\BSON\Regex(<span class="hljs-string">'^ad',&nbsp;<span class="hljs-string">'i'),
&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'projection'&nbsp;=&gt;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'email'&nbsp;=&gt;&nbsp;<span class="hljs-number">1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'limit'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;<span class="hljs-number">1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'sort'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;[<span class="hljs-string">'pop'&nbsp;=&gt;&nbsp;<span class="hljs-number">-1],
&nbsp;&nbsp;&nbsp;&nbsp;]);
<span class="hljs-keyword">foreach&nbsp;($cursor&nbsp;as&nbsp;$restaurant)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($restaurant);
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p>另外一种正则式的写法</p>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$cursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;$collection-&gt;find(
&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;[<span class="hljs-string">'$regex'&nbsp;=&gt;&nbsp;<span class="hljs-string">'^ad',&nbsp;<span class="hljs-string">'$options'&nbsp;=&gt;&nbsp;<span class="hljs-string">'i'],
&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'projection'&nbsp;=&gt;&nbsp;[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'email'&nbsp;=&gt;&nbsp;<span class="hljs-number">1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'limit'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;<span class="hljs-number">1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'sort'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;[<span class="hljs-string">'pop'&nbsp;=&gt;&nbsp;<span class="hljs-number">-1],
&nbsp;&nbsp;&nbsp;&nbsp;]);
<span class="hljs-keyword">foreach&nbsp;($cursor&nbsp;as&nbsp;$restaurant)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;var_dump($restaurant);
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h3>查询多个数据</h3>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$cursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;$collection-&gt;find([<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin']);
<span class="hljs-keyword">foreach&nbsp;($cursor&nbsp;as&nbsp;$document)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-keyword">echo&nbsp;$document[<span class="hljs-string">'_id'],&nbsp;<span class="hljs-string">"\n";
}</span></span></span></span></span></span></span></pre>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559027339129636.png"></p>
<h2>更新数据</h2>
<h3>更新单条数据</h3>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;&nbsp;&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$updateResult&nbsp;=&nbsp;$collection-&gt;updateOne(
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin'],
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'$set'&nbsp;=&gt;&nbsp;[<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'new&nbsp;nickname']]
);
printf(<span class="hljs-string">"Matched&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getMatchedCount());
printf(<span class="hljs-string">"Modified&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getModifiedCount());</span></span></span></span></span></span></span></span></pre>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559029206114764.png"></p>
<h3>更新多条数据</h3>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;&nbsp;&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$updateResult&nbsp;=&nbsp;$collection-&gt;updateMany(
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin'],
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'$set'&nbsp;=&gt;&nbsp;[<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'new&nbsp;nickname']]
);
printf(<span class="hljs-string">"Matched&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getMatchedCount());
printf(<span class="hljs-string">"Modified&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getModifiedCount());</span></span></span></span></span></span></span></span></pre>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559029272301679.png"></p>
<h3>替换文档</h3>
<p>替换文档其它跟更新数据类似,但是这个操作不会修改id,如下</p>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;&nbsp;&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$updateResult&nbsp;=&nbsp;$collection-&gt;replaceOne(
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin'],
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin2',&nbsp;<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'new&nbsp;nickname']
);
printf(<span class="hljs-string">"Matched&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getMatchedCount());
printf(<span class="hljs-string">"Modified&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getModifiedCount());</span></span></span></span></span></span></span></span></span></pre>
<h3>Upsert操作</h3>
<p>这个名字应该是个缩写,更新或替换操作时如果有匹配的数据则直接操作,如果没有匹配的数据则插入一条新数据,意思是如果更新或替换操作的第三个参数如果传 'upsert'=&gt;True 的话就可以开启这个功能</p>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;&nbsp;&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$updateResult&nbsp;=&nbsp;$collection-&gt;updateOne(
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin3'],
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'$set'&nbsp;=&gt;&nbsp;[<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin2',&nbsp;<span class="hljs-string">'name'&nbsp;=&gt;&nbsp;<span class="hljs-string">'new&nbsp;nickname']],
&nbsp;&nbsp;&nbsp;&nbsp;[<span class="hljs-string">'upsert'&nbsp;=&gt;&nbsp;<span class="hljs-keyword">true]
);
printf(<span class="hljs-string">"Matched&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getMatchedCount());
printf(<span class="hljs-string">"Modified&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getModifiedCount());
printf(<span class="hljs-string">"Upserted&nbsp;%d&nbsp;document(s)\n",&nbsp;$updateResult-&gt;getUpsertedCount());
$upsertedDocument&nbsp;=&nbsp;$collection-&gt;findOne([
&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-string">'_id'&nbsp;=&gt;&nbsp;$updateResult-&gt;getUpsertedId(),
]);
var_dump($upsertedDocument);</span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p>如果有匹配的情况下最后输出为NULl</p>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559030215132171.png"></p>
<p>没有匹配的情况下最后输出插入的数据</p>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559030085203984.png"></p>
<h2>删除数据</h2>
<p>复制代码</p>
<pre class="php hljs inited">$collection&nbsp;&nbsp;&nbsp;=&nbsp;(<span class="hljs-keyword">new&nbsp;MongoDB\Client)-&gt;test-&gt;users;
$deleteResult&nbsp;=&nbsp;$collection-&gt;deleteOne([<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin3']);
printf(<span class="hljs-string">"Deleted&nbsp;%d&nbsp;document(s)\n",&nbsp;$deleteResult-&gt;getDeletedCount());
$deleteResult&nbsp;=&nbsp;$collection-&gt;deleteMany([<span class="hljs-string">'username'&nbsp;=&gt;&nbsp;<span class="hljs-string">'admin2']);
printf(<span class="hljs-string">"Deleted&nbsp;%d&nbsp;document(s)\n",&nbsp;$deleteResult-&gt;getDeletedCount());</span></span></span></span></span></span></span></pre>
<p><img src="https://res.zkeli.com/uploads/image/2019/05/1905281559030350141184.png"></p>
</div><br><br>
来源:https://www.cnblogs.com/rxbook/p/11134502.html
頁: [1]
查看完整版本: PHP7 MongoDB 使用方法