2014-01-27 1 views
0

컬렉션 내의 배열에서 요소를 제거하려고합니다. 요소를 제거하려면 색인 (또는 날짜) 필드를보고 값이 가장 낮은 것을 제거해야합니다. 내 컬렉션의 예를 표현 명 "페이지"요소의 특정 필드에 최소값을 갖는 배열 요소 가져 오기

{ 
    "_id": { 
     "$oid": "52e12df7e4b06e4ed65a554c" 
    }, 
    "posts": [ 
     { 
      "postId": { 
       "$oid": "52e12e5933a9fbec1100002d" 
      }, 
      "date": 1390489177.267876, 
      "index": 1 
     }, 
     { 
      "postId": { 
       "$oid": "52e12e5f33a9fb141800002c" 
      }, 
      "date": 1390489183.277084, 
      "index": 2 
     } 
    ], 
    "skillname": "Bilardo", 
    "skilltag": "Bilardo", 
    "currentIndex": 2 
} 

내가 게시물의 배열에서이 요소를 제거해야합니다 내가 할 것이 무엇이든간에

 { 
      "postId": { 
       "$oid": "52e12e5933a9fbec1100002d" 
      }, 
      "date": 1390489177.267876, 
      "index": 1 
     } 

, 나는 최소한의 "를 찾아 관리 할 수 색인 "필드에 있습니다. 내가 쓰는 달성 마지막으로 PHP 코드는 다음과 같습니다 :

$this->db->pages->find(array('skilltag' => 'Bilardo'), array('posts.index' => 1))->sort(array("posts.index" => -1)); 

나는 "인덱스"필드도 "currentIndex"필드를 사용하여 기꺼이 아니에요. 하지만 타임 스탬프 값이있는 "날짜"필드에서 작업 할 수없는 경우에 대비하여 어쨌든 넣습니다.

어레이 내부에 필터링 않는 집계 기능
 { 
      "postId": { 
       "$oid": "52e12e5933a9fbec1100002d" 
      }, 
      "date": 1390489177.267876, 
      "index": 1 
     }, 
     { 
      "postId": { 
       "$oid": "52e12e5f33a9fb141800002c" 
      }, 
      "date": 1390489183.277084, 
      "index": 2 
     } 

없다이다

상기 코드는 2 개 요소를 가지고 배열은 단지 하나의 요소의 배열을 반환? 최소값을 반환하는 집계를 찾을 수 없습니다. 나는 단지 사용자가 제공해야하는 최소값과 최대 값 사이의 값을 반환하는 집계 만 발견했습니다. 이는 제 경우에는 작동하지 않습니다.

답변

0

posts 배열 필드의 포함 된 객체는 항상 dateindex으로 오름차순으로 정렬됩니까? 귀하의 스키마에 따라, 나는 새 게시물이 $push 업데이트 운영자를 통해 문서에 추가된다고 가정합니다.

제거 할 요소가 항상 배열의 맨 앞에 있으면 $pop을 사용하여 쉽게 제거 할 수 있습니다.

관련 문제