si tenta di eseguire un comando di aggregazione:"Un oggetto specifica fase gasdotto deve contenere esattamente un campo" quando si utilizza OrderedDict
request = collections.OrderedDict([
("$unwind", "$tags"),
("$group", { "_id" : "$tags" , "count" : { "$sum" : 1 } }),
("$project", { "_id" : 0, "tag" : "$_id" , "count" : 1 }),
("$sort", { "count" : -1 }),
("$limit", 3)])
print client.devoxx.talks.aggregate(request)
Ma MongoDB la rifiuta:
pymongo.errors.OperationFailure: command SON([('aggregate', u'talks'), ('pipeline', [OrderedDict([('$unwind', '$tags'), ('$group', {'count': {'$sum': 1}, '_id': '$tags'}), ('$project', {'count': 1, '_id': 0, 'tag': '$_id'}), ('$sort', {'count': -1}), ('$limit', 3)])])]) failed: exception: A pipeline stage specification object must contain exactly one field.
Mi sembra che Ho ogni fase aggregata in un articolo del dettato ordinato.
Se si potesse riprodurre questo senza usare pymongo, sarebbe più chiaro e si potrebbe rimuovere il tag python possibilmente irrilevante. –
@ErikAllik Inoltre, dichiaro che il tag non è valido e rimosso. E la dichiarazione non è necessaria perché un Dict non ordinato non è un argomento valido per il metodo che viene chiamato. –