복붙노트

[MONGODB] MongoDB를 집계하여 문자열의 배열을 반환하는 방법

MONGODB

MongoDB를 집계하여 문자열의 배열을 반환하는 방법

나는 MongoDB를 집계하여 문자열의 배열을 반환해야합니다. 나는 다음과 같은했다 :

db.users.aggregate([{$group: {_id:"$emails.address"}}])

그것은 반환 :

{ "_id" : [ "a@a.com" ] }
{ "_id" : [ "b@a.com" ] }
{ "_id" : [ "c@a.com" ] }

이와 같은 문자열의 배열을 반환하는 방법이 있나요 :

["a@a.com","b@a.com","c@a.com"]

당신에게 저를 도와 귀하의 시간을 내 주셔서 대단히 사람을 감사합니다 ..

편집하다

데이터를 추가 :

{
    "_id" : "ukn9MLo3hRYEpCCty",
    "createdAt" : ISODate("2015-10-24T03:52:11.960Z"),
    "emails" : [
        {
            "address" : "a@a.com",
            "verified" : false
        }
    ]
}
{
    "_id" : "5SXRXraariyhRQACe",
    "createdAt" : ISODate("2015-10-24T03:52:12.093Z"),
    "emails" : [
        {
            "address" : "b@a.com",
            "verified" : false
        }
    ]
}
{
    "_id" : "WMHWxeymY4ATWLXjz",
    "createdAt" : ISODate("2015-10-24T03:52:12.237Z"),
    "emails" : [
        {
            "address" : "c@a.com",
            "verified" : false
        }
    ]
}

해결법

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

    1..aggregate () 메소드는 항상 반환 당신이 상관없이 개체와 그 변경할 수 없습니다.

    .aggregate () 메소드는 항상 반환 당신이 상관없이 개체와 그 변경할 수 없습니다.

    당신의 목적을 위해 당신은 더 나은 단지 고유 값의 배열을 반환 않는 대신) (.distinct를 사용하여 떨어져 아마 :

    db.users.distinct("emails.address");
    

    어떤 정확히 원하는 출력입니다 :

    ["a@a.com","b@a.com","c@a.com"]
    

    당신이 정말로 .aggregate를 사용하려면 () 그럼 그냥 값의 요구에 어트 변환은 사후 처리 식의 "외부"발생합니다. 그리고 당신은이 같은 배열을 다룰 때 $ 언 와인드를 사용해야합니다.

    당신은 예를 들어, 자바 스크립트의 .map ()로이 작업을 수행 할 수 있습니다

    db.users.aggregate([
        { "$unwind": "$emails" },
        { "$group": { "_id": "$emails.address" } }
    ]).map(function(el) { return el._id })
    

    이는 동일한 출력을 제공하지만, .MAP ()는 서버에 대신 변환 클라이언트 측을한다.

  2. ==============================

    2.무엇 Blakes 세븐이 응답 한 것은 권리입니다.

    무엇 Blakes 세븐이 응답 한 것은 권리입니다.

    그러나, 당신이 배열에 넣어와 객체의 배열을 반환 할 수없는 것을 의미하지 않는다.

    나는 당신의 노드 서버가 계속 다른 요청을 사용할 수 있습니다로 데이터베이스 자체의 배열에서 해당 매핑이 더 많은 것 생각한다.

    db.users.aggregate([
         { "$unwind": "$emails" },
         { "$group": { "_id": null, emails:{$push:"$emails.address"} } },
         { "$project":{emails:true,_id:false}}
     ])
    

    이 반환합니다 :

    { "emails" : [ "a@a.com", "b@a.com", "c@a.com" ] }
    
  3. from https://stackoverflow.com/questions/33425565/how-to-return-array-of-string-with-mongodb-aggregation by cc-by-sa and MIT license