2014-11-05 11 views
6

Co jest nie tak z tym zapytaniem? Próbowałem uruchomić go na serwerze mongodb i otrzymałem komunikat o błędzie: "wyjątek: złe zapytanie: BadValue nieznany operator najwyższego poziomu: $ gte". Czy ktoś może mi powiedzieć, co jest z nim nie tak?

 db.scores.aggregate([ 
      { 
       $match: { 
        $or: [ 
         { $gte: [ "$score", 30 ] }, 
         { $lte: [ "$score", 60 ] } 
        ] 
       } 
      }, 
      { 
       $group: { 
        _id: "$gamer", 
        games: { $sum: 1 } 
       } 
      } 
     ]) 

próbka danych:

 { 
      "_id" : "545665cef9c60c133d2bce72", 
      "score" : 85, 
      "gamer" : "Latern" 
     } 

     /* 1 */ 
     { 
      "_id" : "545665cef9c60c133d2bce73", 
      "score" : 10, 
      "gamer" : "BADA55" 
     } 

     /* 2 */ 
     { 
      "_id" : "545665cef9c60c133d2bce74", 
      "score" : 62, 
      "gamer" : "BADA55" 
     } 

     /* 3 */ 
     { 
      "_id" : "545665cef9c60c133d2bce75", 
      "score" : 78, 
      "gamer" : "l00ser" 
     } 

     /* 4 */ 
     { 
      "_id" : "545665cef9c60c133d2bce76", 
      "score" : 4, 
      "gamer" : "l00ser" 
     } 

     /* 5 */ 
     { 
      "_id" : "545665cef9c60c133d2bce77", 
      "score" : 55, 
      "gamer" : "FunnyCat" 
     } 

Odpowiedz

8

Ty to zrobiłeś źle. Powinno być:

db.scores.aggregate([ 
    { "$match": { 
     "score": { "$gte": 30, "$lte": 60 } 
    }}, 
    { "$group": { 
     "_id": "$gamer", 
     "games": { "$sum": 1 } 
    }} 
]) 

który jest właściwy sposób określić „zakres” zapytanie gdzie rzeczywiste warunki są „i” i dlatego „pomiędzy” argumentów podanych.

+2

Najważniejsze jest to, że ['$ match' przyjmuje składnię zapytań] (https://docs.mongodb.org/manual/reference/operator/aggregation/match/), więc chcesz użyć [query' $ operator gte' (https://docs.mongodb.org/manual/reference/operator/query/gte/), a nie operator agregacji '$ gte' (https://docs.mongodb.org/manual/ referencja/operator/agregacja/gte /). (BTW, [zapytanie zakresu] (https://docs.mongodb.org/manual/reference/method/db.collection.find/#query-for -ranges) działa poprzez użycie [implicit '$ and'] (https://docs.mongodb.org/manual/reference/operator/query/and/).) – duozmo