mongoDB的ObjectId和查询条件
<h4><strong>一、ObjectId</strong></h4><p>在插入数据时,mongoDB 会自动生成"_id",默认生成的"_id"属于 ObjectId 对象,作用类似于身份证号用来标识每一条数据。</p>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200712194117440-395737822.png"></p>
<p> ObjectId 是一个12字节(16进制) BSON 类型数据,格式分四部分组成4|3|2|3:</p>
<ul>
<li>4个字节时间戳</li>
<li>3个字节机器标识码</li>
<li>2个字节进程id(PID)</li>
<li>3个字节随机数</li>
</ul>
<div class="cnblogs_code">
<pre>例如:ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5f09c1779a5b2a836d9000b3</span><span style="color: rgba(128, 0, 0, 1)">"</span>) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">5f09c177 9a5b2a 836d 9000b3</span>
5f09c177 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">时间戳</span>
9a5b2a <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">机器标识码</span>
836d <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">进程id</span>
9000b3 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">随机数(自动增加的计数器)</span></pre>
</div>
<p>因为 ObjectId 中存储了时间戳,所以可以直接从中获取时间信息:</p>
<div class="cnblogs_code">
<pre>ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5f09c1779a5b2a836d9000b3</span><span style="color: rgba(128, 0, 0, 1)">"</span>).getTimestamp() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取时间信息</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200712201259057-622779721.png"></p>
<p> 也可以再进行获取年月日时分秒信息,如下:</p>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200712203046720-2079666936.png"></p>
<div class="cnblogs_code">
<pre>ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5f09c1779a5b2a836d9000b3</span><span style="color: rgba(128, 0, 0, 1)">"</span>).getTimestamp().getFullYear() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">年</span>
ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5f09c1779a5b2a836d9000b3</span><span style="color: rgba(128, 0, 0, 1)">"</span>).getTimestamp().getMonth() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">月,注意这里的月份是从0开始的(0-11),所以实际使用时可能需要加1</span>
ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5f09c1779a5b2a836d9000b3</span><span style="color: rgba(128, 0, 0, 1)">"</span>).getTimestamp().getDate() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">日</span>
ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5f09c1779a5b2a836d9000b3</span><span style="color: rgba(128, 0, 0, 1)">"</span>).getTimestamp().getHours() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">时,注意这里的加了8</span>
ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5f09c1779a5b2a836d9000b3</span><span style="color: rgba(128, 0, 0, 1)">"</span>).getTimestamp().getMinutes() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">分</span>
ObjectId(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">5f09c1779a5b2a836d9000b3</span><span style="color: rgba(128, 0, 0, 1)">"</span>).getTimestamp().getSeconds() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">秒</span></pre>
</div>
<h4><strong>二、查询条件(query)</strong></h4>
<p>查询条件在很多地方都可以用到,比如 find() | findOne() | update() | remove | aggregate() 里的 $match 等<em id="__mceDel" style="font-family: "Courier New"; font-size: 12px"><span class="pln"><br></span></em></p>
<p>1. 比较大小:</p>
<ul>
<li>(>) 大于 - $gt</li>
<li>(<) 小于 - $lt</li>
<li>(>=) 大于等于 - $gte</li>
<li>(<= ) 小于等于 - $lte</li>
<li>(=) 等于 - $eq</li>
<li>(!=) 不等于 - &ne</li>
</ul>
<p>例:</p>
<div class="cnblogs_code">
<pre>db.grades.<span style="color: rgba(0, 0, 255, 1)">find</span>({English:{$gt:<span style="color: rgba(128, 0, 128, 1)">90</span>}}) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询英语成绩大于90的数据</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200712205404551-1593158530.png"></p>
<p> 2. and, in 和 or</p>
<div class="cnblogs_code">
<pre>db.grades.<span style="color: rgba(0, 0, 255, 1)">find</span>({$and:[{English:{$gt:<span style="color: rgba(128, 0, 128, 1)">60</span>}},{name:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Bob</span><span style="color: rgba(128, 0, 0, 1)">"</span>}]}) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">and 条件并列查询</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200712211157161-353207991.png"></p>
<div class="cnblogs_code">
<pre>db.grades.<span style="color: rgba(0, 0, 255, 1)">find</span>({name:{$<span style="color: rgba(0, 0, 255, 1)">in</span>:[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Tim</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">John</span><span style="color: rgba(128, 0, 0, 1)">'</span>]}}) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">in 多值查询</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200725211155757-448960542.png"></p>
<div class="cnblogs_code">
<pre>db.grades.<span style="color: rgba(0, 0, 255, 1)">find</span>({$or:[{English:{$gt:<span style="color: rgba(128, 0, 128, 1)">60</span>}},{name:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Bob</span><span style="color: rgba(128, 0, 0, 1)">"</span>}]}) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">or 条件或查询</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200712211332504-1010359859.png"></p>
<div class="cnblogs_code">
<pre>db.grades.<span style="color: rgba(0, 0, 255, 1)">find</span>({English:{$exists:<span style="color: rgba(0, 0, 255, 1)">false</span>}}) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询English字段不存在的数据</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200725211539790-2124867774.png"></p>
<p> 3. 正则查询(Regex)</p>
<div class="cnblogs_code">
<pre>db.grades.<span style="color: rgba(0, 0, 255, 1)">find</span>({name:/J/}) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">模糊查询名字中含字母"J"的数据</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2094936/202007/2094936-20200712212639369-1239242869.png"></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/yh2020/p/13289995.html
頁:
[1]