【问题标题】:Select all distinct subdocuments选择所有不同的子文档
【发布时间】:2016-01-07 12:54:55
【问题描述】:

我有下一个文档集合:

{ "_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 迈出第一步。

有什么想法吗?

【问题讨论】:

标签: mongodb


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 2014-05-01
    • 1970-01-01
    • 2017-11-18
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多