0

次のようなドキュメント構造があります。

{
  "_id" : NumberLong("80000000012"),
[...]
  "categories" : [{
      "parent" : "MANUFACTURER",
      "category" : "Chevrolet"
    }, {
      "parent" : "MISCELLANEOUS",
      "category" : "Miscellaneous"
    }],
[...]
}

「親」フィールドごとにすべての「カテゴリ」フィールドの個別のリストを取得しようとしています。次のクエリでこれを行うために、集計フレームワークを利用しようとしていました。

db.posts_temp.aggregate(
    {$unwind : '$categories'},
    {$match : {'categories.parent' : 'MISCELLANEOUS'}},
    {$project : {
        '_id' : 0,
        parent : '$categories.parent',
        category : '$categories.category'
        }
    },
    {
        $group : { 
            _id : '$parent',
            category : {$addToSet : '$category'}
        }
    }
);

このクエリを実行すると、次のエラーが返されます。

{
    "errmsg" : "exception: $unwind:  value at end of field path must be an array",
    "code" : 15978,
    "ok" : 0
}

これは、クエリのグループ部分に関連付けられているようです。これを削除すると、クエリは正しく実行されますが、明らかに、データが必要な場所にないためです。

4

1 に答える 1

0

上記の集計クエリを mongo インスタンスで実行しようとしました。これは、ネストされた 2 つのドキュメントの配列を持つカテゴリのキーを持つ 3 つのドキュメントです。

ここに私のデータがあります:

{
    "_id" : ObjectId("512d5252b748191fefbd4698"),
    "categories" : [
        {
            "parent" : "MANUFACTURER",
            "category" : "Chevrolet"
        },
        {
            "parent" : "MISCELLANEOUS",
            "category" : "Miscellaneous"
        }
    ]
}
{
    "_id" : ObjectId("512d535cb748191fefbd4699"),
    "categories" : [
        {
            "parent" : "MANUFACTURER",
            "category" : "Chevrolet"
        },
        {
            "parent" : "MISCELLANEOUS",
            "category" : "Pickup"
        }
    ]
}
{
    "_id" : ObjectId("512d536eb748191fefbd469a"),
    "categories" : [
        {
            "parent" : "MANUFACTURER",
            "category" : "Toyota"
        },
        {
            "parent" : "MISCELLANEOUS",
            "category" : "Miscellaneous"
        }
    ]
}

私が実行した集計クエリは次のとおりです。

db.posts_temp.aggregate( {$unwind:'$categories'} , {$match: {'categories.parent':'MISCELLANEOUS'}}, {$project:{'_id':0, parent: '$categories.parent', category:'$categories.category'}}, {$group:{_id:'$parent', category:{$addToSet:'$category'}}})

結果は次のとおりです。

{
    "result" : [
        {
            "_id" : "MISCELLANEOUS",
            "category" : [
                "Pickup",
                "Miscellaneous"
            ]
        }
    ],
    "ok" : 1
}

私のデータとあなたのデータの間に矛盾がある場合はお知らせください。

CSharpie

于 2013-02-27T00:39:49.473 に答える