15

私は似たようなスキーマを持っています

{
   'user_id' : 1,
   'marks' : [10, 40]
}

少なくとも 1 回は 20 ~ 30 点を獲得したユーザーの数を見つけたいと考えています。

次のクエリを試しました

db.users.count({
   'marks' : {$gte: '20', $lt: '30'}
})

しかし、これには30以上のマークが付いたものも含まれていました...

4

5 に答える 5

5

これだけではありませんか:

db.scores.count( { 'marks' : { '$gt' : min_value , '$lt' : max_value } } )

あなたの場合、これは次のように変換されます:

db.scores.count( { 'marks' : { '$gt' : 20 , '$lt' : 30 } } )
于 2013-02-23T15:57:18.490 に答える
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 ] }

次に、user_ids 3 と 4 (カウント 2) をフィルター処理することが期待されます。

クエリを実行する最も簡単な方法は次のとおりです。

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

でも可愛くない…

于 2012-04-09T11:08:41.130 に答える