복붙노트

[MONGODB] 어레이의 길이만큼 몽고 오더

MONGODB

어레이의 길이만큼 몽고 오더

나는이 같은 몽고 문서가 있다고 가정하자 :

질문 1

{
    answers:[
       {content: 'answer1'},
       {content: '2nd answer'}
    ]
}

질문 2

{
    answers:[
       {content: 'answer1'},
       {content: '2nd answer'}
       {content: 'The third answer'}
    ]
}

답변의 크기에 의하여 수집을 주문하는 방법이 있나요?

다른 필드를 추가하는 약간의 연구 I 톱 제안 후, 그 대답의 수를 포함 할 것이다 그것은 참고 자료로 사용하지만 그것을 할 수있는 기본 방법이 될 수있다?

해결법

  1. ==============================

    1.난 당신이 $ 크기를 사용할 수 있습니다 생각하지만 특정 크기가 아닌 순서의 배열을 찾을 만합니다.

    난 당신이 $ 크기를 사용할 수 있습니다 생각하지만 특정 크기가 아닌 순서의 배열을 찾을 만합니다.

    몽고 문서에서 : http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

    아직 출시되지 않습니다 : 당신 같은 외모 아마도 비교적 쉽게 새로운 통합 프레임 워크, 편집이 작업을 수행 할 수 있습니다. http://www.mongodb.org/display/DOCS/Aggregation+Framework

    지금 업데이트 집계 프레임 워크는 밖으로 ...

    > db.test.aggregate([
      {$unwind: "$answers"}, 
      {$group: {_id:"$_id", answers: {$push:"$answers"}, size: {$sum:1}}}, 
      {$sort:{size:1}}]);
    {
    "result" : [
        {
            "_id" : ObjectId("5053b4547d820880c3469365"),
            "answers" : [
                {
                    "content" : "answer1"
                },
                {
                    "content" : "2nd answer"
                }
            ],
            "size" : 2
        },
        {
            "_id" : ObjectId("5053b46d7d820880c3469366"),
            "answers" : [
                {
                    "content" : "answer1"
                },
                {
                    "content" : "2nd answer"
                },
                {
                    "content" : "The third answer"
                }
            ],
            "size" : 3
        }
      ],
      "ok" : 1
    }
    
  2. ==============================

    2.나는 이것에 대한 $ 프로젝트를 사용하고 있습니다 :

    나는 이것에 대한 $ 프로젝트를 사용하고 있습니다 :

    db.test.aggregate([
        {
            $project : { answers_count: {$size: { "$ifNull": [ "$answers", [] ] } } }
        }, 
        {   
            $sort: {"answers_count":1} 
        }
        ])
    

    또한 빈 답변 문서를 포함 할 수 있습니다. 그러나 또한 (때로는 또는 장점) 단점이있다 : 수동으로 프로젝트 단계에서 필요한 모든 필드를 추가해야합니다.

  3. ==============================

    3.당신은 $ 정렬 단계에 의해 스토어 횟수에 추가 필드를 추가 한 후 다음됩니다 MongoDB를 집계 단계 $의 addFields를 사용할 수 있습니다.

    당신은 $ 정렬 단계에 의해 스토어 횟수에 추가 필드를 추가 한 후 다음됩니다 MongoDB를 집계 단계 $의 addFields를 사용할 수 있습니다.

    db.test.aggregate([
        {
            $addFields: { answers_count: {$size: { "$ifNull": [ "$answers", [] ] } } }
        }, 
        {   
            $sort: {"answers_count":1} 
        }
    ])
    
  4. from https://stackoverflow.com/questions/9040161/mongo-order-by-length-of-array by cc-by-sa and MIT license