2016-10-27 3 views
2

프론트 엔드로 보내기 전에 정렬하고 싶은 레코드를 가져 왔습니다.몽고 : 키와 값으로 목록 정렬

db.getCollection('users').find({$or: 
        [ 
         {createdBy: 'abhi'}, 
         {createdBy: {'$ne': 'abhi'}, visibility: 'public'} 
        ]}).sort({'createdBy': 1}) 

나는 createdBy 사용자 abhi 먼저 한 다음 다른 사용자에 대한 모든 레코드를 정렬하고 싶습니다. 같은

뭔가 :

.sort({'createdBy == abhi': 1}) 
+0

사용자 'abhi', 첫 번째 및 다른 문서가 오기 전에 모든 문서를 알파벳 순으로 정렬하고 싶습니까? – sergiuz

+0

@SergiuZaharie, 그런 식으로 두 번 전화를 걸어 레코드를 연결해야합니다. 키와 값을 기준으로 정렬을 지정하여 수행 할 수 없습니까? –

답변

1

당신은 집계를 사용하는 것을 얻을 수 있습니다.

  1. 은 문서 필드의 새로운 프로젝션을 확인하고 createdByfirst: false
  2. 정렬은 정렬 된 목록
  3. (재)에 먼저 표시 필드를 넣어 {first:-1, createdBy:1}에 의해 abhi 다른 경우 필드 first: true 표시 임시을 추가

    : 임시 필드를 first

코드를 제거하려면 필드 프로젝트 0

db.users.aggregate([ 
    {$project: 
     { 
      first: 
      { 
       $cond: { if: { "$eq": ["$createdBy", 'abhi' ]}, then: true, else: false } 
      }, 
      createdBy: '$createdBy' 
     } 
    }, 
    {$sort: {first:-1, "createdBy": 1}}, 
    {$project: 
     { 
      createdBy: 1 
      // Don't include first:1 
     }  
    } 
]) 
관련 문제