1

都市に人がいます。都市は「都市」と呼ばれる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はすべての都市の文書をフロントエンドに返すことができます。そして、フロントエンドは人々を分類/グループ化する責任があります。その場合

、Imはについて考える戦略は次のようになります。人によって

ループとだけ孤独な人々を印刷します。誰かと一緒に歩いている人は、別の配列に入るはずです。 最初のステップは、すべての孤独な人々を示すことです。

今、まだカップルを表示する必要があります。まず、カップルの "James and Maria"とカップルの "Robert and Nina"を見せなければなりません。 カップルごとに配列を作成する必要がありますか?上記の例では、2つの配列を作成する必要があります。

しかし、これが最善の戦略であるかどうかはわかりません。 dbスキーマを変更したり、誰かが良い提案をすることができれば、バックエンドにグループ化された人々を提供させることさえできます。

答えて

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([ 
    {$group:{_id:"$city", people:{$push:"$name"}}} 
]) 

2 - 一人で市内のすべての人々

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

、3-誰か

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

おかげで、市内の会合では、すべての人々 。いい音が好きかもしれません。しかし、私はそれを完全に理解しているかどうかわからない。都市コレクションのスキーマはありますか?私は人々の配列を見ません。 – oderfla

+0

さて、各自のスキーマによれば、ドキュメントを別々に挿入する必要があります。今や人々の配列は必要ありません。スキーマのコメントを見てください(コメントを更新しました) – nurulnabi

+0

はまだ説明が必要です。 – nurulnabi

関連する問題