mongodb中根据集合中的字段关系返回查询结果

Mongodb使用知识点记录 专栏收录该内容
24 篇文章 20 订阅

在工作中同事遇到个问题问我,我竟然一时还真不知道怎么处理,问题如下所示:

描述:有个积分表,用于记录用户的一些积分情况,其中有两个字段,score用于记录用户当前积分,totalscore用于记录用户的历史总积分(只增不减),因为代码逻辑问题,导致现网出现了score竟然比历史总积分还要高,想找出有这种情况的那些用户,数据是保存在mongodb中的。

针对这个问题,因为之前没遇到过,所以一时间不知道怎么写语句,今天稍微看了下,这里记录下处理办法。

因为平时在查询时都是跟固定值比较大小,但是现在的问题是集合内部两个字段比较大小,还是有点不同的。

通过查看mongodb的官网,我们在查询时可以使用$where关键字集合javascrit表达式进行查询,针对上面的问题,可以如下进行统计处理:

db.score.find({$where:"this.score > this.totalscore"});

备注说明:

(1)从官网$where的说明可以看出,该关键词后面既可以跟上一个js字符串,也可以跟上一个js函数。

(2)如果是判断两个字段相等,使用"this.score == this.totalscore",只用一个“=”号是不行的。

(3)这里的this其实指的就是遍历的每条文档记录;

我们都知道,使用上面的命令其实只能在控制台看到结果,但是如果记录比较多,那么在控制台观察就不是很方便了,这时候就需要我们保存到文件中。怎么做呢?

我们需要编写一个js函数,然后执行这个js将输出重定向到一个文件。

首先我们看下Js怎么写?testCompare.js如下所示:

conn = new Mongo("127.0.0.1:27017");

db = conn.getDB("test");

db.score.find({$where:"this.score > this.totalscore"}).forEach(

      function(item){

                printjson(item);

      }

)

然后在控制台执行该js脚本,具体如下所示:

mongo 127.0.0.1:27017/test ****/testCompare.js > test.json

执行完命令之后就会将查询出来的匹配结果保存到test.json文件中,如果需要定制输出格式,可以修改printjson(item)语句。
比如我们想把每条记录作为一行,每行按照score和totalscore的先后顺序以英文模式逗号分开,则我们可以把printjson(item)修改为:

print(item.score+","+item.totalscore);

希望能帮助到有需要的人,谢谢。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p style="text-align:left;"> <span> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span style="font-family:"color:#E53333;font-size:14px;background-color:#FFFFFF;line-height:24px;"><span style="line-height:24px;">限时福利1:</span></span><span style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;">购课进答疑群专享柳峰(刘运强)老师答疑服务。</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <strong><span style="color:#337FE5;font-size:14px;">为什么说每一个程序员都应该学习MySQL?</span></strong> </p> <p class="ql-long-24357476"> <span style="font-size:14px;">根据《2019-2020年国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。</span> </p> <p class="ql-long-24357476"> <img src="https://img-bss.csdn.net/202003301212574051.png" alt="" /> </p> <p class="ql-long-24357476"> <span style="font-size:14px;">使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。</span><br /> <br /> <span style="font-size:14px;">学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!</span> </p> <span></span> <p> <br /> </p> <p> <span> </span> </p> <h3 class="ql-long-26664262"> <p style="font-size:12pt;"> <strong class="ql-author-26664262 ql-size-14"><span style="font-size:14px;color:#337FE5;">【课程设计】</span></strong> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;"><br /> </span> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;font-size:14px;">在本课程,刘运强老师会结合自己十多年来对MySQL的心得体会,通过课程给你分享一条高效的MySQL入门捷径,让学员少走弯路,彻底搞懂MySQL。</span> </p> <p style="font-size:12pt;"> <span style="color:#494949;font-weight:normal;"><br /> </span> </p> <p style="font-size:12pt;"> <span style="font-weight:normal;font-size:14px;">本课程包含3大模块:</span><span style="font-weight:normal;font-size:14px;"> </span> </p> </h3> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">一、基础篇:</span></strong> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;">主要以最新的MySQL8.0安装为例帮助学员解决安装与配置MySQL的问题,并对MySQL8.0的新特性做一定介绍,为后续的课程展开做好环境部署。</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">二、SQL语言篇</span></strong><span class="ql-author-26664262" style="font-size:14px;">:</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span class="ql-author-26664262" style="font-size:14px;">本篇主要讲解SQL语言的四大部分数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL,</span><span style="font-size:14px;">学会熟练对库表进行增删改查等必备技能。</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <strong class="ql-author-26664262"><span style="font-size:14px;">三、MySQL进阶篇</span></strong><span style="font-size:14px;">:</span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <span style="font-size:14px;">本篇可以帮助学员更加高效的管理线上的MySQL数据库;具备MySQL的日常运维能力,语句调优、备份恢复等思路。</span> </p> <span><span> <p style="font-size:11pt;color:#494949;"> <span style="font-size:14px;"> </span><img src="https://img-bss.csdn.net/202004220208351273.png" alt="" /> </p> </span></span>
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页

打赏

DreamMakers

您的肯定是我坚持的最大动力。

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值