31

コレクションに次のドキュメントがあるとします。

{
   "family": "Smith",
   "children": [
        {
            "child_name": "John"
        },
        {
            "child_name": "Anna"
        },
    ]
}

{
   "family": "Williams",
   "children": [
        {
            "child_name": "Anna"
        },
        {
            "child_name": "Kevin"
        },
    ]
}

ここで、すべてのファミリにまたがる一意の子の名前の次のリストを何らかの形で取得したいと考えています。

[ "John", "Anna", "Kevin" ]

結果の構造は異なる場合があります。MongoDBでそれを達成する方法は? 簡単なもののはずですが、わかりません。コレクションでaggregate()関数を試しましたが、distinct()関数を適用する方法がわかりません。

4

2 に答える 2

54

あなたはただ行うことができます:

db.collection.distinct("children.child_name");

あなたの場合、それは返します:

[ "John", "Anna", "Kevin" ]
于 2013-04-22T19:59:08.727 に答える
6

ヘルプ集計フレームワークを使用:

db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name'}}])

以上の関心 ;) 名前の頻度:

db.collection.aggregate([{$unwind:'$children'}, {$group:{_id:'$children.child_name', freq:{$sum:1}}}])
于 2013-04-22T19:50:50.930 に答える