1

도시에 사람이 있습니다. 도시는 "cities"라는 mongodb 콜렉션으로 표현됩니다. 도시의 사람들은 혼자이거나 같은 도시의 다른 사람과 토글하는 사람입니다.연결된 사용자를 그룹화하는 가장 좋은 전략은 무엇입니까

스키마는 다음과 같습니다

{ 
    name: String, 
    people: [ 
     { 
      name: String, 
      status?: String, 
      walkingWith?: String  
     } 
    ] 
} 

"상태"와 "walkingWith"나는 내 전략이 올바른지, 사용하고자하는 사람은 필드. 여기

는 일부 항목은 다음과 같습니다

var newyorkPeople = []; 
newyorkPeople[0] = {"name": "Jack", "status": "alone", "walkingWith": "none"}; 
newyorkPeople[1] = {"name": "James", "status": "meeting", "walkingWith": "Maria"}; 
newyorkPeople[2] = {"name": "Robert", "status": "meeting", "walkingWith": "Nina"}; 
newyorkPeople[3] = {"name": "Steven", "status": "alone", "walkingWith": "none"}; 
newyorkPeople[4] = {"name": "Maria", "status": "meeting", "walkingWith": "James"}; 
newyorkPeople[5] = {"name": "Nina", "status": "meeting", "walkingWith": "Robert"}; 

내가 다음에 사람들과 새로운 도시를 입력 :

db.cities.insert({"name": "New York", "people": newyorkPeople}); 

이제 목표는 클라이언트 (프론트 엔드)에 대한 쉽게 만드는 것입니다 이 도시에 사람들이 무엇인지 묘사하십시오. 그룹화하십시오. 먼저 모든 외로운 사람들을 보여주세요. 그리고 나서 togheter를 걷고있는 "커플들".

그룹화를 백엔드 또는 프론트 엔드 (각도)에서 수행하는 것이 더 좋은지 확실하지 않습니다.

백엔드 (api)에서 express.js를 사용하고 있습니다. api는 모든 도시 문서를 프론트 엔드로 반환 할 수 있습니다. 그리고 프론트 엔드는 사람들을 분류/분류 할 책임이 있습니다. 사람들을 통해

루프 만 혼자있는 사람들을 인쇄 :이 경우

는 생각 전략 임 것이다. 누군가와 함께 걷고있는 사람들은 다른 배열로 가야합니다. 첫 번째 단계는 모든 외로운 사람들을 보여주는 것입니다.

이제 커플을 보여줄 필요가 있습니다. 먼저 나는 커플 "James and Maria"와 커플 "Robert and Nina"를 보여줄 필요가있다. 각 커플에 대해 배열을 만들어야합니까? 위의 예제에서는 2 개의 배열을 생성해야합니다.

그러나 이것이 최상의 전략인지 확신 할 수 없습니다. 누군가가 좋은 제안을 할 수 있다면 db-schema를 수정하거나 심지어 백엔드가 그룹화 된 사람들을 전달할 수 있도록해도 괜찮습니다.

답변

1

는 다음 (당신의 간체) 스키마를

{ 
    name:Stirng,  //name of the person 
    city:String,  //name of the city 
    status:String,  //status 
    walkingWith:String //name of the person walking with 
} 

이 스키마, 그것은 당신의 쿼리를 쉽게 만들 수 있습니다 사용의 혜택을 사용할 수 있습니다. 당신의 필요를 문의하십시오.

1 도시에있는 모든 사람들이 혼자

db.city.aggregate([ 
     {$match:{status:"alone"}}, 
     {$group:{_id:"$city", people:{$push:"$name"}}} 
    ]) 

3 사람과 도시 회의에있는 모든 사람들에게 도시에서

db.city.aggregate([ 
    {$group:{_id:"$city", people:{$push:"$name"}}} 
]) 

2 모든 사람

db.getCollection('demos').aggregate([ 
    {$match:{status:"meeting"}}, 
    {$group:{_id:"$city", people:{$push:{name:"$name", walkingWith:"$walkingWith"}}}} 
]) 
+0

감사합니다 . 좋은 해결책이 될 것 같은 소리. 그러나 나는 그것을 충분히 이해하지 못했다. 도시 컬렉션 스키마가 있습니까? 나는 사람들의 배열을 보지 못한다. – oderfla

+0

이제 각자의 스키마에 따라 별도로 문서를 삽입해야합니다.사람들이 지금 배열 할 필요가 없습니다. 스키마 (주석 업데이트)에서 주석에보세요 – nurulnabi

+0

여전히 어떤 설명이 필요 물어 봐야합니다. – nurulnabi

관련 문제