Whisher
Whisher

Reputation: 32766

mongodb how to retrieve all the value in fields type array?

Is there a way to retrieve all the values of a fields type array

ie

{ "slug" : "my-post", "status" : "publish", "published" : ISODate("2014-01-26T18:28:11Z"), "title" : "my post", "body" : "my body post", "_id" : ObjectId("52e553c937fb8bf218b8c624"), "tags" : [  "js",  "php",  "scala" ], "created" : ISODate("2014-01-26T18:28:25.298Z"), "author" : "whisher", "__v" : 0 }
{ "slug" : "my-post-2", "status" : "publish", "published" : ISODate("2014-01-26T18:28:27Z"), "title" : "my post 2", "body" : "spost body", "_id" : ObjectId("52e5540837fb8bf218b8c625"), "tags" : [  "android",  "actionscript",  "java" ], "created" : ISODate("2014-01-26T18:29:28.915Z"), "author" : "whisher", "__v" : 0 }

the result should be like "android", "actionscript", "java","js", "php", "scala"

Upvotes: 1

Views: 70

Answers (2)

TruongSinh
TruongSinh

Reputation: 4866

You can $unwind, and then $group them back

db.collection.aggregate({ $unwind : "$tags" }, {$group:{_id: "$tags"}});

The result would be

{ _id: "android"},
{ _id: "actionscript"},
{ _id: "java"},
{ _id: "js"},
{ _id: "php"},
{ _id: "scala"}

Upvotes: 1

WiredPrairie
WiredPrairie

Reputation: 59773

Use the distinct command (reference):

> db.test.distinct("tags")
[ "js", "php", "scala", "actionscript", "android", "java" ]

You could use aggregation if you eventually needed something more complex:

> db.test.aggregate(
         { $project: { tags : 1 } },  
         { $unwind : "$tags" }, 
         { $group : { _id: "$tags" }  }  );

Results:

[
    {
            "_id" : "java"
    },
    {
            "_id" : "actionscript"
    },
    {
            "_id" : "android"
    },
    {
            "_id" : "scala"
    },
    {
            "_id" : "php"
    },
    {
            "_id" : "js"
    }
]

I'd use $project (reference) to reduce the number of fields being passed through the pipeline though. In the example above, I've used $project to include only the tags for example.

Upvotes: 0

Related Questions