2012-07-30 2 views
0

이 작업을 수행 할 수 있는지 확실하지 않으므로 요청할 것입니다.몽고 및 정렬 하위 배열

나는 다음과 MongoDB를/s의

{ 
"store":"abc", 
"offers":[{ 
    "spend":"100.00", 
    "cashback":"10.00", 
    "percentage":"0.10" 
    },{ 
    "spend":"50.00", 
    "cashback":"5.00", 
    "percentage":"0.10" 
    }] 
} 

{ 
    "store":def", 
    "offers":[{ 
     "spend":"50.00", 
     "cashback":"2.50", 
     "percentage":"0.05" 
     },{ 
     "spend":"20.00", 
     "cashback":"1.00", 
     "percentage":"0.05" 
     }] 
    } 

{ 
     "store":ghi", 
     "offers":[{ 
      "spend":"50.00", 
      "cashback":"5.00", 
      "percentage":"0.10" 
      },{ 
      "spend":"20.00", 
      "cashback":"2.00", 
      "percentage":"0.10" 
      }] 
     } 

정렬은 백분율로 할 필요가 있습니다.

다른 PHP 함수의 usort를 사용하거나 Mongodb이 내가하고 싶은 일을하기에 충분히 똑똑해야하는지 확실하지 않습니다.

답변

1

놀랍게도, 그래, MongoDB가이 작업을 수행 할 수 있습니다

문서 내에서 배열의 데이터 구조를 감안할 때
// Sort ascending, by minimum percentage value in the docs' offers array. 
db.collection.find({}).sort({ 'offers.percentage': 1 }); 

// Sort descending, by maximum percentage value in the docs' offers array. 
db.collection.find({}).sort({ 'offers.percentage': -1 }); 
+0

문서를 정렬 할 수는 있지만 문서 내의 배열에 도움이되는 방법이나 Mongo가 정렬되지 않은 배열을 처리하는 방법에 대해서는 확신 할 수 없습니다. 예를 들어 % s가 0.05, 0.10 인 문서를 예측 적으로 0.10, 0.05로 정렬 할 수 있습니다. – Stennie

+0

각 제안이 자체 수집 행에 있다면 더 좋을까요? – RussellHarrower

1

, 나는 그것이하여 MongoDB에서 이런 종류의 작업을 수행하는 것이 합리적 생각하지 않는다 - 몽고는 전체를 반환 될 것입니다 문서 (배열 아님).

제안을 비교하려는 경우 임베디드 배열 대신 별도의 컬렉션을 갖는 것이 좋습니다. 예를 들어, 지출액 또는 백분율 할인순으로 정렬 된 적어도 5 달러의 현금 환불과 일치하는 오퍼를 찾을 수 있습니다.

단일 문서 내에서 쿠폰을 주문하려는 경우 PHP에서 usort()으로 주문할 수 있습니다.