Рассмотрим коллекции «фрукты», в котором у меня есть этот документ (я использую драйвер PyMongo Питона, кстати):В MongoDB как вернуть только часть массива?
{
'_id' : 'lemons',
'weight' : 58,
'shape' : 'oval',
'countries' : ['Mexico', 'Turkey', 'Argentina', 'SAfrica', 'US']
}
Теперь, если я хочу, чтобы получить только поле "стран, этот запрос работает просто отлично:
In [1]: find_one('lemons', { 'countries' : 1, '_id' : 0 })
Out[1]: {u'countries': [u'Mexico', u'Turkey', u'Argentina', u'SAfrica', u'US']}
Но оказывается, что то, что мне действительно нужно просто список из немногих топ-стран, не все из них, поэтому я использую «$ срез» вместо обычного True/1:
In [239]: c.find_one('lemons', { 'countries' : { '$slice' : [0, 3] }, '_id' : 0 })
Out[239]:
{u'countries': [u'Mexico', u'Turkey', u'Argentina'],
u'shape': u'oval',
u'weight': 58}
Ну, число стран сократилось, но теперь это дает мне много другой несвязанной информации!
Вопрос: Есть ли способ показать только те поля, которые я просил? Кроме того, исключение «_id» в качестве исключения прекрасное, поскольку это поле всегда представлено, но я не могу быть уверен в других полях, поскольку MongoDB не имеет схемы, и я намерен использовать эту функцию для добавления дополнительных полей, если это необходимо.
Ничего себе, это похоже на работу! что заставило вас подумать о добавлении еще одного «фиктивного» поля? – Brad
Я много сделал с монго, и всегда кажется, что это временное решение, чтобы заставить их работать как ожидалось = p –
Спасибо, это потрясающее (если неожиданное) решение. –