Я пытаюсь найти все документы со строкой "комментария" в
Поле «КОММЕНТАРИЙ» из документов, которые выглядят примерно так
{
"_id": "5d10aaf8130d5f9e386be977",
"info": {
"files": ["filename"],
"bands": [{
"metadata": {
"": {
"COMMENT": "comment"
}
}
}]
},
"file": "filename"
}
Я пробовал этот запрос, и все, казалось, работало просто отлично
comment = coll.find(
{"info":
{"bands":
{"$elemMatch":
{ "0":
{"metadata":
{"":
{"COMMENT":
{
"comment"
}
}
}
}
}
}
}
}
)
Если я пытаюсь посмотреть на спецификацию курсора, я вижу в нем атрибут "set", хотя понятия не имею, почему.
> _Cursor__spec:{'info': {'bands': {...}}} 'info':{'bands': {'$elemMatch': {...}}} 'bands':{'$elemMatch': {'0': {...}}}
> '$elemMatch':{'0': {'metadata': {...}}} '0':{'metadata': {'': {...}}}
> 'metadata':{'': {'COMMENT': set([...])}} '':{'COMMENT':
> set(['comment'])} 'COMMENT':set(['comment'])
> 63587936:'comment'
Наконец, если я попытаюсь сделать
while (comment.next()):
print(anything)
Я получаю следующую ошибку:
bson.errors.InvalidDocument: невозможно кодировать объект: set (['comment']),
типа:
Если я изменю следующую часть запроса
{"$elemMatch": { "0":
до
{"$elemMatch": { 0:
или даже просто
{ 0:
Ошибка меняется на (курсор остается с атрибутом "set"):
bson.errors.InvalidDocument: документы должны иметь только строковые ключи, ключ
было 0
P.S .: Я пробовал другие запросы, которые не включали массивы или сложное вложение без каких-либо проблем