我有一个名为user
的集合,其中包含用户信息。
在该用户集合中,我有一个特定于用户的skills
数组。
如何从每个用户拥有的每个skill
创建一个集合,以便我可以将该列表用作查找表?
答案 0 :(得分:0)
假设您的数据结构如下:
db.users.insert({name:'ninja', skills: ['katana', 'shuriken']});
db.users.insert({name:'developer', skills: ['c#', 'sql', 'katana', 'mongodb']});
您可以使用aggregation获取skills
中所有users
的列表。
更具体地说,聚合可能如下所示:
db.users.aggregate([
{ $unwind: '$skills' },
{ $group: {_id: '$skills'} }
]);
上面的汇总有两个步骤:
注意:为了更好地了解$unwind
步骤的作用,您只需执行该步骤即可运行聚合:db.users.aggregate([ { $unwind: '$skills' } ]);
上面两步聚合的结果如下所示:
{
"result": [
{ "_id": "mongodb" },
{ "_id": "sql" },
{ "_id": "c#" },
{ "_id": "shuriken" },
{ "_id": "katana" }
],
"ok": 1
}
最后,为了将这些结果保存到名为skills
的新集合中,您可以在mongo shell中运行以下命令:
> var unique_skills = db.users.aggregate([ { $unwind: '$skills' }, { $group: {_id: '$skills'} } ]).result;
> db.skills.insert(unique_skills);