2024-04-27 20:58:37 发布
网友
我有一个类似于
{ 'user_id' : 1, 'marks' : [10, 40] }
我想找出至少一次得分在20到30分之间的用户数量。
我试过下面的问题
db.users.count({ 'marks' : {$gte: '20', $lt: '30'} })
但这也包括那些分数超过30分的。。。
使用^{}将范围查询的两部分约束到相同的marks元素:
marks
db.users.count({ marks: {$elemMatch: {$gte: 20, $lt: 30}} })
所以假设你在收集分数中有以下数据:
{ 'user_id' : 1, 'marks' : [ 10, 40 ] } { 'user_id' : 2, 'marks' : [ 5, 18 ] } { 'user_id' : 3, 'marks' : [ 15, 25 ] } { 'user_id' : 4, 'marks' : [ 22, 33 ] }
然后过滤用户id 3和4,计数为2。
运行查询的最简单方法是:
db.scores.count({'marks':{$in: [20,21,22,23,24,25,26,27,28,29,30]}})
但不漂亮。。。
不就是这样吗:
db.scores.count( { 'marks' : { '$gt' : min_value , '$lt' : max_value } } )
在你的情况下,这将转化为:
db.scores.count( { 'marks' : { '$gt' : 20 , '$lt' : 30 } } )
使用^{} 将范围查询的两部分约束到相同的
marks
元素:所以假设你在收集分数中有以下数据:
然后过滤用户id 3和4,计数为2。
运行查询的最简单方法是:
但不漂亮。。。
不就是这样吗:
在你的情况下,这将转化为:
相关问题 更多 >
编程相关推荐