2016-08-26 3 views
0

У меня есть список пар вещей, например, формы. [['A', 'B'], ['C', 'D']]. Я хочу запросить MongoDB для записей в определенной коллекции, которые имеют свойства, соответствующие обеим из этих вещей.Как вы запрашиваете MongoDB по парам ключей с помощью pymongo

К примеру, вот что я хотел бы, чтобы вернуться:

[{'_id': ObjectId('...'), 
    'first_property': 'A', 
    'second_property': 'B' 
}, 
{'_id': ObjectId('...'), 
    'first_property': 'C', 
    'second_property': 'D' 
}] 

Как запросить одновременные свойства, используя pymongo?

ответ

1

Я получил очень хорошую производительность из следующей схемы:

client.find({'$or': [{'property_a': value_a, 'property_b': value_b} for value_a, value_b in some_list_of_two_element_tuples]} 

Это создает очень длинный $or заявления из наших запрашиваемых кортежей.

+0

Не будет ли это повторяться через цикл for каждый раз, когда pymongo возвращает кусок данных? Было бы проще сделать 'cursor = client.find ({'$ или': [{'property_a': value_a, 'property_b': value_b}, {'property_a': 1, 'property_b': 1}) ; 'затем перебирать курсор? – jwillis0720

+0

Боюсь, я не совсем понимаю ваш комментарий, поскольку он не кажется семантически правильным. Вам не хватает ']'? –

+0

Да, должно. Мне просто интересно, нужно ли сначала взять курсор, а затем итератировать. – jwillis0720

Смежные вопросы