web-dev-qa-db-fra.com

Erreur d'agrégation MongoDB: l'objet de spécification d'étape de pipeline doit contenir exactement un champ

Je suis nouveau sur mongodb et j'essaie d'agrégation pour la première fois. Ici, j'essaie d'obtenir le nombre de tweets regroupés toutes les 15 minutes. Lorsque j'essaie d'exécuter la requête ci-dessous dans la console Mongo, j'obtiens l'erreur:

Un objet de spécification d'étape de pipeline doit contenir exactement un champ.

    db.hashtag.aggregate([
    { "$group": {
        "_id": {
            "year": { "$year": "$tweettime" },
            "dayOfYear": { "$dayOfYear": "$tweettime" },
            "interval": {
                "$subtract": [ 
                    { "$minute": "$tweettime" },
                    { "$mod": [{ "$minute": "$tweettime"}, 15] }
                ]
            }
        }},
        "count": { "$sum": 1 }
    }
])

Je n'ai pas pu trouver une bonne explication de la raison dans SO. Veuillez partager vos réflexions sur ce sujet et pourquoi ma requête contient une erreur.

17
nanospeck

MongoDB se plaint car vous avez une spécification d'étape de pipeline non reconnue "count": { "$sum": 1 } dans votre pipeline.

Votre pipeline d'origine lorsqu'il est correctement formaté

db.hashtag.aggregate([
    { 
        "$group": {
            "_id": {
                "year": { "$year": "$tweettime" },
                "dayOfYear": { "$dayOfYear": "$tweettime" },
                "interval": {
                    "$subtract": [ 
                        { "$minute": "$tweettime" },
                        { "$mod": [{ "$minute": "$tweettime"}, 15] }
                    ]
                }
            }
        },
        "count": { "$sum": 1 } /* unrecognised pipeline specification here */
    }
])

devrait avoir l'accumulateur agrégé $sum dans le $group pipeline comme:

    { 
        "$group": {
            "_id": {
                "year": { "$year": "$tweettime" },
                "dayOfYear": { "$dayOfYear": "$tweettime" },
                "interval": {
                    "$subtract": [ 
                        { "$minute": "$tweettime" },
                        { "$mod": [{ "$minute": "$tweettime"}, 15] }
                    ]
                }
            },
            "count": { "$sum": 1 }
        }           
    }
])
23
chridam