Я пытаюсь запросить массив с помощью PyMongo, и я получаю все значения вместо одного, соответствующего 'А А'
Формат массива:
"tags": [
{
"tag": {
"name": "A A"
}
}
]
Код Python:
import pymongo
from pprint import pprint
myclient = pymongo.MongoClient("mongodb://00.00.00.0:27017")
mydb = myclient["dbName"]
mycol = mydb["thePage"]
for x in mycol.find({},{"_id": 0, "tags.tag.name": "A A"}):
pprint(x)
Результат:
[{'tag': {'name': 'A A'}},
{'tag': {'name': 'B B'}},
{'tag': {'name': 'C C'}}]
Ожидаемый результат:
{'name': 'A A'}
Я получаю нужный мне результат с помощью MongoDB:
db.dbName.where("tags.tag.name").eq("A A")
@styvane Это не работает. Он возвращает все результаты не только имя, но и другие переменные.
Используйте здесь проекцию $elemMatch ... db.collection.find({ "tags.tag.name": "A A" }, { "tags": { $elemMatch: { "tag.name": "A A" } } })
@AnthonyWinzlet Я получаю invalid syntax рядом с $elemMatch. Мой код: myQuery = { "tags.tag.name": "A A" }, { "tags": { $elemMatch: { "tag.name": "A A" } } }for x in mycol.find({}, myQuery):pprint(x)
Сделал то же самое? mongoplayground.net/p/tqBuuNZVBNF






Сначала вам нужно разобрать массив. Попробуйте сделать это:
mycol.aggregate([
{'$unwind':'$tags'},
{'$match': {
'tags.tag.name':'A A',
}},
{'$project': {
'tags.tag.name': 1, '_id': 0
}},
])
Куда это идет в моем коде? Извините, я новичок в Python и MongoDb
@newbierp просто замените вашу строку mycol.find на это.
Я получаю сообщение об ошибке self._error_message(selector)) pymongo.errors.ServerSelectionTimeoutError: 00.00.00.0:27017: timed out
У вас проблема с сервисом mongo. Вы запускаете службу mongo с терминала?
Извини, это было моей проблемой. Я исправил это. Но теперь у меня новая ошибка: pymongo.errors.OperationFailure: path option to $unwind stage should be prefixed with a '$': tags
Попробуй еще раз скопировать мой код. я действительно редактировал это несколько минут назад. у вас может не быть нового. Или вы можете просто добавить знак $ перед тегами. {'$unwind':'$tags'}.
Неважно, это я тоже исправил. Но теперь этот запрос возвращает черный {}
Спасибо, вот что я сделал. Это не дает мне никаких ошибок, но и не дает мне результата. Это просто дает {}
Это было у меня плохо. У меня было лишнее пространство между A A
Извините, что опоздали. У меня был быстрый вопрос: я пытаюсь использовать оператор LIKE для '$match': {'tags.tag.name':'A A',}. Я пытался сделать '$match': {'tags.tag.name':'/A A/',}, но получаю сообщение об ошибке. Что я делаю неправильно?
На самом деле это не ошибка, ничего не возвращает
Разве {'tags.tag.name':'A A',} не является точным соответствием tags.tag.name ='A A' в SQL. Я пытался сделать Pymongo, эквивалентный tags.tag.name LIKE '%A A%'
Не могли бы вы помочь с этим: stackoverflow.com/questions/52829141/…
Вам нужен фильтр запросов.
mycol.find({"tags.tag.name": "A A"})