mongo db查询大于等于的数组值

Ris*_*abh 13 arrays mongodb

我有一个类似的架构

{
   'user_id' : 1,
   'marks' : [10, 40]
}
Run Code Online (Sandbox Code Playgroud)

我想找到至少一次得分在20到30之间的用户数量.

我尝试了以下查询

db.users.count({
   'marks' : {$gte: '20', $lt: '30'}
})
Run Code Online (Sandbox Code Playgroud)

但这也包括标记超过30的那些......

Joh*_*yHK 27

用于$elemMatch将范围查询的两个部分约束到同一 marks元素:

db.users.count({
    marks: {$elemMatch: {$gte: 20, $lt: 30}}
})
Run Code Online (Sandbox Code Playgroud)


can*_*his 5

不就是这样吗:

db.scores.count( { 'marks' : { '$gt' : min_value , '$lt' : max_value } } )
Run Code Online (Sandbox Code Playgroud)

在您的情况下,这将转化为:

db.scores.count( { 'marks' : { '$gt' : 20 , '$lt' : 30 } } )
Run Code Online (Sandbox Code Playgroud)


Geo*_*ff 1

因此,假设您在收集分数中有以下数据:

{ 'user_id' : 1, 'marks' : [ 10, 40 ] }
{ 'user_id' : 2, 'marks' : [ 5, 18 ] }
{ 'user_id' : 3, 'marks' : [ 15, 25 ] }
{ 'user_id' : 4, 'marks' : [ 22, 33 ] }
Run Code Online (Sandbox Code Playgroud)

那么您会期望过滤 user_ids 3 和 4,计数为 2。

运行查询的最简单方法是:

db.scores.count({'marks':{$in: [20,21,22,23,24,25,26,27,28,29,30]}})
Run Code Online (Sandbox Code Playgroud)

但不漂亮...