无法识别的管道阶段名称:'光标' pymongo出错

时间:2018-01-19 09:58:55

标签: python mongodb

myresults = db.persona.aggregate([{"$match": {'$or': [{"id": {"$gte": 1}},{"id": {"$lte": 20000}}]}},{ "$project": {"id": 1,"ward": 1}},{'cursor': {'batchSize': 0}}],useCursor=False)
for result in myresults:
    db.persona.update_many({"_id":result["_id"]},{"$set": {column_name:df1.iloc[:,m][list(result.values())[1]]}})

OperationFailure中的错误:无法识别的管道阶段名称:'光标'

我该如何解决这个问题

1 个答案:

答案 0 :(得分:0)

  

OperationFailure中的错误:无法识别的管道阶段名称:'光标'

方法 PyMongo中的aggregate()指定第一个参数是pipeline,它是聚合管道阶段的列表。该错误是因为cursor不是有效的Aggregation Pipeline Stage

所以你可以用:

来纠正这个问题
myresults = db.persona.aggregate([{"$match": {"$or": [{"id": {"$gte": 1}},{"id": {"$lte": 20000}}]}},{ "$project": {"id": 1,"ward": 1}}])

for result in myresults:
   print(result) # process result document. 

请注意,参数useCursor已弃用,将在PyMongo v4.0 +中删除。根据您的示例代码段,您可能希望返回可以迭代的cursor

  

{'光标':{' batchSize':0}}

另外值得注意的是,这是aggregation pipeline通过mongo shell的光标选项,也许是混淆来自的地方。