2016-10-07 3 views
0

내 MongoDB 지식은 상당히 작지만 내 MongoDb 설정에서 번역에 저장합니다. 문제는 원래 제목 코드로 제목을 정렬해야한다는 것입니다. 그래서 sort 함수에서 originalLangCode 값을 원합니다.MongoDB는 정렬 함수에서 필드 값을 사용합니다.

그래서 NL 언어로만 정렬하면됩니다. 내 쿼리는 다음과 같이 될 것이다 :

db.getCollection("name").find({}).sort({"translations.NL.title" : 1}); 

그러나 실제로 원하는 것은 같은 :

db.getCollection("name").find({}).sort({"translations.originalLangCode.value.title" : 1}); 

one of the records

그래서 사람이 어떤 도움을 주시면 감사하겠습니다!

+0

[질문 할 때 SO의 코드 이미지를 업로드 할 수없는 이유는 무엇입니까?] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code) -on-so-when-asking-a-question) – chridam

+0

그래서 "originalLangCode"가 어떤 값으로 정렬 되길 원하나요? –

+0

모든 문서에서 언어 수가 제한됩니까? –

답변

0

값을 키로 사용하는 것은 좋지 않습니다. 값을 키로 사용하면 mongodb처럼 키 필드에서 값을 전달할 수 없으므로 값을 키로 사용하면 쿼리를 수행하기가 어렵습니다.

언어 코드 (NL, DE)가 제한되어있는 경우 아래 코드를 사용하여 originalLangCode에 따라 정렬 할 수 있습니다.

db.getCollection('name').aggregate(
    [ 
     { 
     $project: { 
      id_: 1, 
      corLang: 1, 
      corLat: 1, 
      translations: 1, 
      orignalsort: { 
       $concat: [{ 
        $cond: [ { $eq: ["$originalLangCode", "NL"] }, "$translations.NL.title", "" ] 
        },{ 
        $cond: [ { $eq: ["$originalLangCode", "DE"] }, "$translations.DE.title", "" ] 
        },{ 
        $cond: [ { $eq: ["$originalLangCode", "FR"] }, "$translations.FR.title", "" ] 
        }] 
      } 
     } 
     }, 
     { 
     $sort: {orignalsort: 1} 
     } 
    ] 
) 

이 ** 상기 용액은 MongoDB의 버전보다 3.3.5 용이며 당신이 아니라 최신 안정 버전은 향후 버전 3.3.5에서 3.2

입니다 사용해야 우리는 $ 스위치 연산자를 사용할 수 있습니다, 스위치 솔루션은 아래 코드와 같습니다 **

db.getCollection('name').aggregate(
    [ 
     { 
     $project: { 
      id_: 1, 
      corLang: 1, 
      corLat: 1, 
      translations: 1, 
      orignalsort: { 
       $switch: { 
        branches: [ 
         { 
          case: { $eq: ["$originalLangCode", "NL"] }, 
          then: "$translations.NL.title" 
         }, 
         { 
          case: { $eq: ["$originalLangCode", "DE"] }, 
          then: "$translations.DE.title" 
         }, 
         { 
          case: { $eq: ["$originalLangCode", "FR"] }, 
          then: "$translations.FR.title" 
         },     
        ], 
        default: "$translations.NL.title" 
       } 
      } 
     } 
     }, 
     { 
     $sort: {orignalsort: 1} 
     } 
    ] 
) 

로컬 시스템에서 첫 번째 코드를 테스트했지만 스위치 케이스를 선택하지 않았습니다.

+0

쿨, 많이 도와 줬어! 그런 아이디어를 주셔서 감사합니다! –

관련 문제