根据mongodb的原始文档列表创建文档列表

时间:2013-10-14 04:25:13

标签: mongodb

我有一个名为user的集合,其中包含用户信息。

在该用户集合中,我有一个特定于用户的skills数组。

如何从每个用户拥有的每个skill创建一个集合,以便我可以将该列表用作查找表?

1 个答案:

答案 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创建所有(非唯一)技能及其所属用户的列表
  • group将生成所有技能的唯一列表

注意:为了更好地了解$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);
相关问题