복붙노트

[MONGODB] MongoDB를 - 배열의 마지막 요소에 쿼리?

MONGODB

MongoDB를 - 배열의 마지막 요소에 쿼리?

나는 MongoDB를 구문 찾기 {array.0.field : "값을"} 지원 알지만, 내가 특별히 내가 인덱스를 모르는 의미 배열의 마지막 요소에 대해이 작업을 수행하고자합니다. 나는 운이에 대한 운영자의 어떤 종류가 있는가, 또는 무엇입니까?

편집 : 내가 배열의 마지막 요소의 필드에 특정 값이 일치하는 경우에만 반환 문서) (찾을 원하는 명확합니다.

해결법

  1. ==============================

    1.3.2이 가능하다. 첫 번째 프로젝트 때문에 myField는 마지막 요소를 포함하고 myField에 일치합니다.

    3.2이 가능하다. 첫 번째 프로젝트 때문에 myField는 마지막 요소를 포함하고 myField에 일치합니다.

    db.collection.aggregate([
       { $project: { id: 1, myField: { $slice: [ "$myField", -1 ] } } },
       { $match: { myField: "myValue" } }
    ]);
    
  2. ==============================

    2.$ 슬라이스를 사용합니다.

    $ 슬라이스를 사용합니다.

    db.collection.find( {}, { array_field: { $slice: -1 } } )
    

    편집 : 당신은 사용할 수있다  {<필드> : {$ elemMatch : {<쿼리 1>, <쿼리 2>, ...}}} 일치하는 항목을 찾습니다.

    그러나 당신이 찾고있는 정확하게 제공하지 않습니다. 아직 MongoDB가 가능하다 생각하지 않습니다.

  3. ==============================

    3.여기 공식 몽고 구글 그룹에 게시, 그들의 직원의 대답을 얻었다. 내가 무엇을 찾고 있어요 것은 가능하지 않은 것 같습니다. 난 그냥 다른 스키마 방법을 사용하겠습니다.

    여기 공식 몽고 구글 그룹에 게시, 그들의 직원의 대답을 얻었다. 내가 무엇을 찾고 있어요 것은 가능하지 않은 것 같습니다. 난 그냥 다른 스키마 방법을 사용하겠습니다.

  4. ==============================

    4.당신은 일반 쿼리에서 집계 함수를 사용하여 $ EXPR (3.6 몽고 버전 연산자)를 사용할 수 있습니다.

    당신은 일반 쿼리에서 집계 함수를 사용하여 $ EXPR (3.6 몽고 버전 연산자)를 사용할 수 있습니다.

    집계 비교 연산자 대 쿼리 연산자를 비교.

    스칼라 배열

    db.col.find({$expr: {$gt: [{$arrayElemAt: ["array", -1]}, value]}})
    

    내장 배열의 - 도트 표기법을 사용하여 $ arrayElemAt 표현 마지막 요소를 투영합니다.

    db.col.find({$expr: {$gt: [{"$arrayElemAt": ["$array.field", -1]}, value]}})
    

    봄 @query 코드

    @Query("{$expr:{$gt:[{$arrayElemAt:[\"array\", -1]}, ?0]}}")
    ReturnType MethodName(ArgType arg);
    
  5. ==============================

    5.확실하지 성능에 대해,하지만 나를 위해 잘 작동합니다 :

    확실하지 성능에 대해,하지만 나를 위해 잘 작동합니다 :

    db.getCollection('test').find(
      {
        $where: "this.someArray[this.someArray.length - 1] === 'pattern'"
      }
    )
    
  6. ==============================

    6.당신이 $ 푸시하고 항상 쿼리 array.0 가장 최근에 추가 된 요소를 얻을 때마다 0 : 당신은 $ 위치를 사용할 수 있습니다. 물론 다음, 당신은 새로운 "마지막"요소를 얻을 수있을 실 거예요.

    당신이 $ 푸시하고 항상 쿼리 array.0 가장 최근에 추가 된 요소를 얻을 때마다 0 : 당신은 $ 위치를 사용할 수 있습니다. 물론 다음, 당신은 새로운 "마지막"요소를 얻을 수있을 실 거예요.

  7. ==============================

    7.버전 3.6을 사용 집계는 동일한을 달성했다.

    버전 3.6을 사용 집계는 동일한을 달성했다.

    db.getCollection('deviceTrackerHistory').aggregate([
       {
         $match:{clientId:"12"}
       },
       {
         $project:
          {
             deviceId:1,
             recent: { $arrayElemAt: [ "$history", -1 ] }
          }
       }
    ])
    
  8. ==============================

    8."12345"과 "값"보다 마지막 요소의 값이 $ GT는 다음, 내가 원하는 경우 주문 번호 응답 사용 $의 arrayElemAt 위해? 방법은 $ EXPR로 만들려면? 감사!

    "12345"과 "값"보다 마지막 요소의 값이 $ GT는 다음, 내가 원하는 경우 주문 번호 응답 사용 $의 arrayElemAt 위해? 방법은 $ EXPR로 만들려면? 감사!

    내장 배열의 - 도트 표기법을 사용하여 $ arrayElemAt 표현 마지막 요소를 투영합니다.

     db.col.find({$expr: {$gt: [{"$arrayElemAt": ["$array.field", -1]}, value]}})
    
  9. from https://stackoverflow.com/questions/28680295/mongodb-query-on-the-last-element-of-an-array by cc-by-sa and MIT license