source

Mongodb - 잘못된 쿼리: 잘못된 값 알 수 없는 최상위 연산자: $gte

manysource 2023. 6. 24. 09:19

Mongodb - 잘못된 쿼리: 잘못된 값 알 수 없는 최상위 연산자: $gte

이 쿼리의 문제점은 무엇입니까?mongodb 서버에서 실행하려고 했는데 "exception: bad query: Bad Value unknown top level operator: $gte"라는 오류가 발생했습니다.누가 그것에 무슨 문제가 있는지 말해줄 수 있습니까?

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

표본 데이터:

        {
            "_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"
        }

당신이 잘못했어요.해야 할 일:

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

이것이 실제 조건이 "및"이고 따라서 지정된 피연산자 사이에" 있는 "범위" 쿼리를 지정하는 적절한 방법입니다.

MongoDB 버전 3.6 이후에는 $expr을 사용하여 쿼리 내에서 집계 식을 사용할 수 있습니다.따라서 쿼리를 다음으로 다시 작성할 수 있습니다.

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

이게 나 같은 사람에게 도움이 될지도...나의 경우에는fieldnull이며 알 수 없는 최상위 연산자인 $in, MongoDb 예외 오류가 발생했습니다.

private <T> void addQueryCondition (Query query, String field , List<T> valuesList ) {
    if (!CollectionUtils.isEmpty(valuesList)) {
        query.addCriteria(Criteria.where(field).in(valuesList).exists(true));
    }
}

다음과 같이 cmd 프롬프트에 명시적으로 패키지를 포함해야 합니다.npm i regex다음과 같이 서비스를 변경합니다.

const kidDetails = await this.studentModel.find({ name:{$regex: new RegExp('.*' + studName, 'i') }} );

언급URL : https://stackoverflow.com/questions/26755391/mongodb-bad-query-badvalue-unknown-top-level-operator-gte