Как правильно сделать запрос из пимонго - PullRequest
0 голосов
/ 20 февраля 2019

Я использую pymongo для подмножества коллекции в mongodb, у меня проблемы с синтаксисом запроса, это мой запрос:

import pymongo
client=pymongo.MongoClient("localhost",27017)
db=client("publications")
collec=db("zikaVirus2")

pipeline=db.collec.aggregate([
   {"$match":{"fullText":{"$exists": "true"}}},
   {"$out": "pub_fulltext"}
])

db.pub_fulltext.aggregate(pipeline)

Я получаю эту ошибку:

Traceback (most recent call last):
  File "genColFulltext.py", line 3, in <module>
    db=client("publications")
TypeError: 'MongoClient' object is not callable

ОБНОВЛЕНИЕ 1

Если я сделаю

import pymongo
client=pymongo.MongoClient("localhost",27017)
db=client.publications
collec=db.zikaVirus2

pipeline=db.collec.aggregate([
{"$match":{"fullText":{"$exists": "true"}}},
{"$out": "pub_fulltext"}
])

db.pub_fulltext.aggregate(pipeline)

Я получу

Traceback (most recent call last):
  File "genColFulltext.py", line 11, in <module>
    db.pub_fulltext.aggregate(pipeline)
  File "/home/danielo/.local/lib/python3.5/site-packages/pymongo    /collection.py", line 2397, in aggregate
**kwargs)
  File "/home/danielo/.local/lib/python3.5/site-packages/pymongo/collection.py", line 2242, in _aggregate
    common.validate_list('pipeline', pipeline)
  File "/home/danielo/.local/lib/python3.5/site-packages/pymongo/common.py", line 428, in validate_list
    raise TypeError("%s must be a list" % (option,))
TypeError: pipeline must be a list

ОБНОВЛЕНИЕ 2

Этот код выполняется без проблем, но он ничего не делает для своей цели, коллекция pub_fulltext имеет что-то, когда она должна иметь данные.

import pymongo
client=pymongo.MongoClient("localhost",27017)
db=client.publications
collec=db.zikaVirus2

pipeline=db.collec.aggregate([
{"$match":{"fullText":{"$exists": "true"}}},
{"$out": "pub_fulltext"}
])
for item in pipeline:
    db.pub_fulltext.aggregate(item)

Затем я пытаюсь это:

import pymongo
client=pymongo.MongoClient("localhost",27017)
db=client.publications
collec=db.zikaVirus2

pipeline=[db.collec.aggregate([
{"$match":{"fullText":{"$exists": "true"}}},
{"$out": "pub_fulltext"}
])]
for item in db.collection.aggregate(pipeline):
    db.collection.aggregate(item)

Получение этой ошибки:

Traceback (most recent call last):
  File "genColFulltext.py", line 10, in <module>
    for item in collection.aggregate(pipeline):

Traceback (most recent call last):   File "genColFulltext.py", line 10, in <module>
for item in db.collection.aggregate(pipeline):   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/collection.py", line 2397, in aggregate
**kwargs)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/collection.py", line 2304, in _aggregate
client=self.__database.client)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/pool.py", line 584, in command
self._raise_connection_failure(error)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/pool.py", line 745, in _raise_connection_failure
raise error   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/pool.py", line 579, in command
unacknowledged=unacknowledged)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/network.py", line 114, in command
codec_options, ctx=compression_ctx)   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pymongo/message.py", line 679, in _op_msg
flags, command, identifier, docs, check_keys, opts) bson.errors.InvalidDocument: Cannot encode object: <pymongo.command_cursor.CommandCursor object at 0x1008e4198>
...