정렬

2013-10-14 7 views
3

내가 같이 문서의 컬렉션이 있다고 가정 해 : 나는 특정 사용자 ID, 포함하는 "사용자"하위 문서가있는 문서에 대해 질의하고 가정, 이제정렬

{ 
    "_id": ObjectId("507f191e810c19729de860ea"), 
    "users": [{ 
     "userId": ObjectId("507f1f77bcf86cd799439011"), 
     "deleted": false, 
     "updatedAt" ISODate("2013-10-17T20:46:22Z") 
    }, { 
     "userId": ObjectId("507f1f71baf40ea8438490fa"), 
     "deleted": false, 
     "updatedAt" ISODate("2013-10-17T22:19:10Z") 
    }] 
} 

을하는 ISN 't 삭제 - 그래서, 쿼리처럼 보이는 :

{"users.userId": ObjectId("507f1f77bcf86cd799439011"), "users.deleted": false} 

은 그 다음 행에 일치하는 하위 문서의 updatedAt 속성에 의해 반환 된 결과 집합을 정렬 할 수 있을까? 그렇지 않다면 이것을 설정하는 더 적절한 방법이 있습니까? 내가 현재 users 키에 포함 된 컬렉션을 새로 만들고 그 참조를 부모 문서로 만들어야합니까?

답변

1

예 가능합니다. 이것을 시도 할 수 있습니다 :

db.collection.aggregate([ 
{$unwind:"$users"}, 
{$match:{"users.userId":"ObjectId("507f1f77bcf86cd799439011")","users.deleted":false}}, 
{$sort:{"users.updatedAt":1}}]) 

여기서 '컬렉션'은 컬렉션 이름으로 바뀝니다.

+0

인덱스가'{ "users.userId": 1, "users.deleted": 1, "users.updatedAt": -1}'로 정의 된 경우 해당 인덱스는이 쿼리를 포함합니까? 이것은 일반적으로 실행될 것이므로 성능상의 이유로 별도의 콜렉션에 이것을 가져 오는 것이 더 합리적이라면 - 나는 그렇게 할 것입니다. –

+0

@ ColinMorelli 네 그래도 계속 작동합니다. – Jhanvi

+0

@ ColinMorelli하지만 여전히 테스트 할 수 있습니다. – Jhanvi