каков здесь правильный синтаксис? получение типа Ошибка типа: недоступный тип: ‘дикт

#python #mongodb #dataframe #nosql #pymongo

Вопрос:

 query={"colourCode" : "orange" },{"createdOn":{ "$gt" : my_datetime}},{"assignmentRef":{'$ne':None}}

cursor = collection.find({query},{'createdOn':1,'assignmentRef.name':1,'_id':0,'colourCode':1})


list_cur = list(cursor)

df = DataFrame(list_cur)
print(df)

Result

TypeError: unhashable type: 'dict'
 

в чем здесь проблема? пожалуйста, перепишите код с правильным синтаксисом, чтобы я четко мог его понять.

Комментарии:

1. Какая линия выдает эту ошибку? А также query действительно ли ваш кортеж состоит из диктантов, как вы здесь указали?

2. @khelwood в первой строке запроса появляется ошибка, каким может быть решение?

3. Похоже, запрос должен быть (единственным) словарем. Вы не можете объединить коллекцию словарей, хранящихся в переменной query , в один словарь, просто завернув ее в {} {query}

4. @HenryEcker пожалуйста, укажите правильный синтаксис для {запроса} пожалуйста, напишите код здесь. чтобы я мог сравнить ваш synax с моим синтаксисом для запроса.

Ответ №1:

У вас есть две проблемы; запрос должен быть построен как словарь (ваш создает кортеж), и первый параметр поиска должен быть просто query не {query} .

Это должно быть ближе к тому, что вам нужно:

 import datetime
from pandas import DataFrame
from pymongo import MongoClient

db = MongoClient()['mydatabase']
collection = db.mycollection
my_datetime = datetime.datetime.now()

query = {"colourCode": "orange", "createdOn": {"$gt": my_datetime}, "assignmentRef": {'$ne': None}}

cursor = collection.find(query, {'createdOn': 1, 'assignmentRef.name': 1, '_id': 0, 'colourCode': 1})

list_cur = list(cursor)

df = DataFrame(list_cur)
print(df)
 

Комментарии:

1. это сработало, спасибо, чувак. в моем запросе кода неверный синтаксис