2017-02-23 26 views
0

Так что моя коллекция что-то вроде:Найти значение в массиве

[ 
    {"name": "one", "jobs": ["1","2","3","4","5"]}, 
    {"name": "two", "jobs": ["6","7","8","9","10"]}, 
    {"name": "three", "jobs": ["11","12","13","14","15"]}, 
] 

И я хочу, чтобы создать запрос, чтобы найти имя на основе значения из jobs. Поэтому, если jobs=2, имя должно быть one; если jobs=9, имя должно быть two; если jobs=13, имя должно быть three. Что я положил в db.collection.find({ ?? })

Спасибо.

ответ

1

Просто дополняет другой ответ, если вы хотите найти из диапазона рабочих мест, вы можете сделать что-то вроде:

db.collection.find({jobs:{$in:["13","14"]}},{name:1}) 

Если вы хотите, чтобы получить slice этого массива, вы можете использовать оператор среза. Он принимает два параметра: первый - это начальный индекс, а второй - количество элементов после этого индекса. Вот пример:

db.tasks.find({jobs:{$in:["13","14"]}},{name:1,jobs:{$slice : [0,2]}}) 

Это займет два элементы из индекса [0] массива.

+0

Это не работает. Имя не возвращается. И что мне делать, если я тоже хочу вернуть номер задания? Благодарю. – Somename

+0

Вы уверены, что используете правильный код? {name: 1} означает поместить имя. Если вы хотите вернуть имя и все задания, вы можете просто выполнить запрос без второй части, например 'db.collection.find ({jobs: {$ in: [" 1 "," 2 "]}})' или добавьте задания к проекции 'db.collection.find ({...}, {name: 1, jobs: 1})' –

+0

Спасибо. Я делал тип. Благодарю. Теперь я могу получить все значения. – Somename

2

Вы можете попробовать что-то вроде этого.

В следующем запросе будут выделены все строки, в которых массив jobs имеет элемент со значением "3" и проецирует поле name.

db.collection.find({jobs:"3"},{name:1}) 

Подробнее здесь https://docs.mongodb.com/manual/reference/operator/query/eq/#array-element-equals-a-value

+0

Это работает. Но что, если я хочу найти 2 имени. Я попробовал '{jobs:" 2 "|| jobs: "9"} '. Благодарю. Также, если я хочу вернуть все из этого значения, а не только «имя», что я делаю? MySQ эквивалентно 'SELECT *' – Somename

+1

Добро пожаловать. Для первой части попробуйте {$ или: [{jobs: "2"}, {jobs: "9"}]}. Во второй части избавиться от {name: 1}. – Veeram