2012-02-02 3 views
2

MongoDB에서 문서의 배열을 정렬 한 다음 정렬 된 배열을 문서에 다시 저장하는 가장 효율적인 방법은 무엇입니까?정렬 된 배열을 다시 MongoDB에 저장하는 방법은 무엇입니까?

배경으로 시간 소인 된 데이터 모음을 생성하여 DB에 저장하는 프로세스가 있지만 시간 순서대로 저장되는 것은 아닙니다. 데이터 수집이 완료되면 이후의 모든 쿼리가 항상 시간별 정렬이 필요하므로 데이터 정렬을 시간별로 정렬하고 DB에 다시 쓰고 싶습니다.

감사합니다.

+0

당신이 사용하는 언어는 무엇? 당신의 쿼리는 어떻게 생겼습니까? 우리는 더 많은 정보가 필요합니다. – Brendan

답변

4

MongoDB에는 내부 배열 정렬이 없습니다. 해당 배열을 PHP (또는 무엇이든)로 읽어서 정렬하고 다시 저장하십시오.

db.collection.update({_id: document_id}, {$set: {myarray: [3, 2, 1]}}); 

나중에 해당 배열을 읽으면 정렬 된 상태로 유지됩니다.

1

MongoDB의 2.4 릴리스에서는 $sort 수정자를 사용하여 배열 필드를 업데이트 할 때 배열 필드를 정렬 된 순서로 유지하는 또 다른 옵션을 제공합니다.

db.collection.update({_id: document_id}, { 
    $push: { 
     myarray: { 
      $each: [{timestamp: 456, x: 1}, {timestamp: 123, x: 2}, ...], 
      $sort: {timestamp: 1} 
     } 
    } 
}); 

이 갱신 된 문서의 myarray 필드의 요소가 될 것이다 timestamp 오름차순으로 분류되어 저장 될 수있다. 그냥 어떤 새로운 것을 추가하지 않고 장소에 기존의 요소를 정렬 할 경우

, $each: [] 사용

db.collection.update({_id: document_id}, { 
    $push: { 
     myarray: { 
      $each: [], 
      $sort: {timestamp: 1} 
     } 
    } 
}); 
관련 문제