mongodb中根据集合中的字段关系返回查询结果
来源:互联网 发布:嵌入式软件系统测试 编辑:程序博客网 时间:2024/05/16 10:12
在工作中同事遇到个问题问我,我竟然一时还真不知道怎么处理,问题如下所示:
描述:有个积分表,用于记录用户的一些积分情况,其中有两个字段,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);
希望能帮助到有需要的人,谢谢。
- mongodb中根据集合中的字段关系返回查询结果
- mongodb中查询返回指定字段
- mongodb中根据内嵌文档中的条件查询
- php 返回查询结果某个字段
- 多对多关系中,根据其中一个字段查询另一个字段(createAlias)
- MongoDB中关于查询条件中包含集合中字段的查询
- MongoDB 集合字段匹配查询方法
- MongoDB 如何选择查询结果指定字段 去掉_id字段
- hibernate查询结果返回Map集合
- MongoDB文档翻译-CRUD操作-从查询中返回投影字段
- 查询出来的结果根据某一字段进行分类
- 根据传入的sql查询结果返回HashMap<String,String>
- mongodb中根据时间范围进行查询
- sql 查询字段结果中显示单引号
- Hibernate查询指定字段并返回对象的结果集
- mybatis 使用oracle char 字段查询返回结果总是null
- mybatis 使用oracle char 字段查询返回结果总是null
- MongoDB查询操作限制返回字段的方法
- 如何写一个简单的搜索引擎
- textView 自动换行, 可以文本内容动态移动
- iOS - 图表Chart
- 【SpringMVC学习01】宏观上把握SpringMVC框架
- MFC响应组合键
- mongodb中根据集合中的字段关系返回查询结果
- poi excel 强制换行
- android 中加密问题
- Node.js UDP测试
- windows下 java 环境配置 和 eclipse 安装汉化
- 推荐大家一个github上好的电子签名
- 第一章 算法的基本概念(1)
- glMatrixMode函数
- memcached安装失败