0

これは重複した質問ではありませんもう1つの質問は、Mongo 2.6とは大きく異なります。私は既にもう一つの質問を読んだことがあります。この質問の最後の段落でもそれに取り組んでいます。MongoDB 2.4集計エラー:不明なオブジェクトが返されましたMotorAggregationCursor

ファーストオフ、私はモンゴでは非常に新しく、PyMongoではもっと新しいです。私は既存のスクリプトを使って作業していて、ローカルで実行されない理由をデバッグしようとしています。次のクエリではエラーが発生します。

問合せ:

[{ 
    u'$match': { 
    u'geocode.co_iso2': u'US', 
    u'brand._id': UUID('xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx') 
    } 
}, 
{ 
    u'$group': { 
    u'_id': u'$brand._id', 
    u'num': {u'$sum': 1} 
    } 
}, 
{ 
    u'$sort': {u'num': -1} 
}, 
{ 
    u'$limit': 100000 
}] 

コード:

cursor = yield db[collection].aggregate(bsonQuery) 
self.write(bson.json_util.dumps(cursor)) 

エラー:

私もこれはモンゴ2.4とPyMongo 2.8であることに注意したい
Exception: <class 'tornado.gen.BadYieldError'>:yielded unknown object MotorAggregationCursor(<motor.core._LatentCursor object at 0x10a897b50>) 

。私は同じようなエラーのある人は、yieldを除いてcursorを保存してからwhile(yield...)を保存するように指示されていることを知っています。 Mongo 2.4には当てはまらないようです。これは、次の言葉:

Exception: <class 'pymongo.errors.OperationFailure'>:command SON([('aggregate', u'MyCollection'), ('pipeline', [{u'$match': {u'geocode.co_iso2': u'US', u'brand._id': UUID('xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')}}, {u'$group': {u'_id': u'$brand._id', u'num': {u'$sum': 1}}}, {u'$sort': {u'num': -1}}, {u'$limit': 100000}]), (u'cursor', {})]) on namespace mydatabase.$cmd failed: unrecognized field "cursor 

答えて

1

私は実際にはMongoDB 2.4は、特にこのエラーを投げることができる別の理由があるのでcousin questionだそれにこれを追加することを意味しました。

MongoDB 2.4では、集計結果として「カーソル」はサポートされませんでした。これは、あなたが「オフ」は、具体的にそのオプションを有効にする必要があることを意味し、ひいてはそれが「非同期」メソッド呼び出し自体と返された結果が今enumarable配列"results"含むドキュメントです.aggregate()ます:

reply = yield collection.aggregate(pipeline,cursor=False) 
for doc in reply['results']: 
    print(doc) 

だから、それはだがcursor=Falseがコールで欠落しているため、「非同期」になります。

関連する問題