来自mongoDB中多个文档的多个不同的键

时间:2014-01-20 21:37:40

标签: mongodb

我有几个这样的文件:

{
  category:"rootCategory1";
  subCategory: "subCategory1";
  text: "some text";
}
{
  category:"rootCategory1";
  subCategory: "subCategory2";
  text: "some text";
}
{
  category:"rootCategory2";
  subCategory: "subCategory3";
  text: "some text";
}
{
  category:"rootCategory2";
  subCategory: "subCategory4";
  text: "some text";
}

我是否可以像这样得到一份文件:

{
  category:"rootCategory1";
  subCategories:[
      {
        title:"subCategory1";
        title:"subCategory2";
      }
  ]
}
{
  category:"rootCategory2";
  subCategories:[
      {
        title:"subCategory3";
        title:"subCategory4";
      }
  ]
}

通过某种命令?

我已经尝试过查看mapReduce,但据我所知,它并不支持多个值。 我用它来为subCategories创建一个连接字符串,但我真的很想把负担放在数据库上,而不是我正在开发的webapp。

感谢。

**更新:

我在每个子类别下添加了一些标题,第一个答案给了我很多帮助,但现在,经过大量的尝试和失败,第一个答案给了我这个:

{
 category:"someRootCategory",
 subCategory:[
       subCategory: "someSubCategory",
       subCategory: "someOtherSubCategory"
 ]
 title: "someTitle"
}

我的文件现在是这样的:

{
 category:"rootCategory",
 subCategory:"subCategory",
 title:"title"
}

这使我无法确定哪个标题属于哪个子类别。我怎么做这样的事情:(它甚至可能吗?)

{
 category:"rootCategory",
 information:[
   {
   subCategory: "sub1",
   titles:[{
     title:"title1",
     title:"title2"
   }],
   subCategory:"sub2",
   titles:[{
     title:"title3"
   }]
 ]
}

由于

2 个答案:

答案 0 :(得分:2)

这样的东西?

db.yourcollection.aggregate(
{ $group: {
   _id:"$category",
   subCategories: {$addToSet: "$subCategory"}
  }
}

检查$addToSet运营商。

答案 1 :(得分:1)

通过大量的试验和错误,我得出了分裂一切的结论。

像这样:

rootCategories.json:

{
 "rootCategory": "someRootCategory"
}

subCategories.json:

{
 "subCategory": "someSubCategory",
 "relation": <a rootCategory's ObjectId>
}

articles.json:

{
 "title": "Some articletitle",
 "text": "Some articletext",
 "relation": <a subCategory's ObjectId>
}

通过这种方式,我可以将标题/文本分类到它们所属的子类别和rootcategory。

不知道这是否正确,但这似乎是解决问题的最佳方法。