对链接用户进行分组的最佳策略是什么

What is the best strategy for grouping linked users

一城有人。城市由名为 "cities" 的 mongodb 集合表示。 城里的人,不是一个人就是一个人走在同一个城市。

架构是:

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

字段 "status" 和 "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});

现在,我们的目标是让客户(前端)更容易描述这个城市的人。并将它们分组。 首先展示所有孤独的人。然后一起走的"couples"

我不确定在后端还是在前端进行分组更好 (angular)。

在后端 (api) 我正在使用 express.js。 api 可以只 return 所有城市文档到前端。然后前端将对 sort/group 人员负责。

在那种情况下,我考虑的策略是:

遍历人物,只打印单独的人物。与人同行者,应另排。 至此第一步,向所有孤独的人展示,就完成了。

现在,我还需要展示情侣。首先,我需要展示 "James and Maria" 对,然后 "Robert and Nina" 对。 我应该为每对夫妇创建一个数组吗?在上面的示例中,它应该创建 2 个数组。

但是,我不确定这是最好的策略。如果有人能提出一些好的建议,我可以修改 db-schema 甚至让后端传送分组的人。

您可以使用以下(简化的)架构

{
    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"}}}}
])