2015-06-30 3 views
2

Вот моя структура документа:Как .find() "URL-адрес последнего элемента массива"?

{ 
     "name": "object name", 
     "details": "object details", 
     "images": [{ 
       "size": "large", 
       "url": "http://domain.com/large.png" 
     }, { 
       "size": "medium", 
       "url": "http://domain.com/medium.png" 
     }, { 
       "size": "small", 
       "url": "http://domain.com/small.png" 
     }] 
} 

Некоторые документы только имеют «большие» изображения, некоторые из них все, некоторые из них имеют только «средний» образ. Я хочу сделать, чтобы получить URL-адрес последнего элемента массива.

Вот что я пробовал:

.find({},{"images.url":1}) 

Возвращает все URL. Я также попытался использовать $ slice, без каких-либо успехов (ошибки параметров).

Пожалуйста, обратите внимание, что я пытаюсь получить «URL последнего элемента» не «последний элемент»

ищет решение.

+3

Возможный дубликат [с использованием оператора $ slice для получения последнего элемента массива в mongodb] (http://stackoverflow.com/questions/21952005/using-slice-operator-to-get-last-element-of-array -in-mongodb) – scx

+1

Вы пытались использовать '$ slice' таким образом' db.test.find ({}, {"images.size": 0, "images": {"$ slice": -1}}) 'или получить значение url с помощью' findOne() 'как' db.test.findOne ({}, {"images.size": 0, images: {$ slice: -1}}). images [0] .url '? – chridam

+0

Я не уверен, что там не так, но $ slice: -1 не имеет никакого значения вообще, похоже, что я делаю .find(), а не отправляю правильный запрос @chridam – Mia

ответ

1

Вы можете использовать карту() для фильтрации ответ:

.find({}, { _id: 0, name: 0, details: 0, images: { $slice: -1 } }).map(function(u) { return u.images[0].url; }); 
1

я понял, что причина $ ломтика не работал для меня было то, что мой MongoDB была версия 2.6.6 Я обновил свой MongoDB версии 3.0.4, и он отлично работает следующим образом:

.find({},{"images.url":1,"images.url":{$slice:-1}}) 

Благодарим вас за комментарии.

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