Найти документ, который находится внутри массива, используя Pymongo - PullRequest
0 голосов
/ 21 марта 2020

Я действительно новичок в понедельник go, я пытался извлечь документ, который находится внутри массива, используя pymon go, без какого-либо результата. Следующее изображение показывает структуру базы данных mongos.

enter image description here

Я просто хочу извлечь, например, первый или второй документ, который принадлежит к " массив данных. Я пробовал использовать следующие коды:

data = condition.find_one({},{'data.ref':2})
data = condition.find({ 'data': {'$eq': '1'} })
data = condition.find({'data.ref':1})
data = condition.find({'_id':1},{'data.ref':1})
data = condition.find({'data.ref':1},{'trq.min':50})
data = condition.find({ "data" : { "$elemMatch" : { "ref" : 1} }})

Буду признателен за любую ссылку, чтобы проконсультироваться или любую помощь для извлечения одного документа из этого массива.

1 Ответ

1 голос
/ 21 марта 2020

Вы можете использовать $ elemMatch (проекция) для проецирования нужного значения массива.

Обратите внимание, что я просто конвертирую курсор в список для удобства обработки.

На основе следующего документа:

{'_id': 1,
 'data': [{'1': {'trq': {'max': 100, 'min': 50}}, 'ref': 1},
          {'2': {'trq': {'max': 50, 'min': 50}}, 'ref': 2}],
 'max': 100,
 'min': 30}

Следующий запрос вернет первую ссылку и подавит идентификатор:

mlist1 = list(coll.find({}, {
    '_id': 0,
    'data': {'$elemMatch': {'ref': {'$eq': 1}}}
}))

Результаты:

{'data': [{'1': {'trq': {'max': 100, 'min': 50}}, 'ref': 1}]}

Для второго:

mlist1 = list(coll.find({}, {
    '_id': 0,
    'data': {'$elemMatch': {'ref': {'$eq': 2}}}
}))

Результаты:

{'data': [{'2': {'trq': {'max': 50, 'min': 50}}, 'ref': 2}]}
...