选择所有不同的子文档

时间:2016-01-07 12:54:55

标签: mongodb

我有下一个文件集:

{ "_id" : ObjectId("568dc77473bf57f465da61dd"), "name" : "Rama", "items" : [ { "id" : 40, "name" : "Botella" }, { "id" : 30, "name" : "Frasco" } ] }
{ "_id" : ObjectId("568dc78873bf57f465da61de"), "name" : "Pepe", "items" : [ { "id" : 40, "name" : "Botella" }, { "id" : 29, "name" : "Cigarrillo" } ] }

每个文档都有一个项目集合。每个项目都是一个文档。所以我有集合中所有不同项目的列表:

{ "id" : 40, "name" : "Botella" }, 
{ "id" : 29, "name" : "Cigarrillo" },
{ "id" : 30, "name" : "Frasco" }

使用$ unwind,我为每个文档获得了一个项目:

db.test.aggregate([{'$unwind': '$items'}, {'$project': {'items.id': 1, 'items.name': 1, '_id': 0}}])
{ "items" : { "id" : 40, "name" : "Botella" } }
{ "items" : { "id" : 30, "name" : "Frasco" } }
{ "items" : { "id" : 40, "name" : "Botella" } }
{ "items" : { "id" : 29, "name" : "Cigarrillo" } }

但现在,我不知道如何得到不同的“物品”。我正在使用MongoDB执行我的第一步。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以对items.iditems.name进行分组,以获取不同的项目

db.test.aggregate([
     {'$unwind': '$items'}, 
     {'$group': {'_id':{'id':'$items.id', 'name':'$items.name'}}},
     {'$project': {'items': '$_id', '_id':0}}])