Вопрос:
В моем MongoDB у меня есть коллекция учеников с 10 записями, имеющими поля name и roll. Одна запись этой коллекции:
{ «_id» : ObjectId(«53d9feff55d6b4dd1171dd9e»), «name» : «Swati», «roll» : «80», }
Я хочу, чтобы получить поле roll только для всех 10 записей в коллекции, как мы могли бы сделать в традиционной базе данных с помощью:
SELECT roll FROM student
Я просмотрел много блогов, но все они приводят к запросу, в котором должно быть WHERE, например:
db.students.find({ «roll»: { $gt: 70 })
Запрос эквивалентен:
SELECT * FROM student WHERE roll > 70
Мое требование – найти только один ключ без каких-либо условий. Итак, какова операция запроса для этого.
Ответ №1
Из Документы MongoDB:
В проекции может быть явно включено несколько полей. В следующей операции метод find() возвращает все документы, соответствующие запросу. В результирующем наборе только поля item и qty и по умолчанию поле _id возвращается в соответствующие документы.
db.inventory.find({type: ‘food’}, {item: 1, qty: 1})
В этом примере от людей из Mongo, возвращенные документы будут содержать только поля item, qty и _id.
Таким образом, вы должны иметь возможность выдавать такой оператор, как:
db.student.find({}, {roll:1, _id:0})
Вышеуказанный оператор выберет все документы в коллекции студентов, а возвращенный документ вернет только поле roll (и исключает _id).
Если мы не упомянем _id:0, возвращаемые поля будут roll и _id. Поле “_id” всегда отображается по умолчанию. Поэтому нам нужно явно указать _id:0 вместе с roll.
Ответ №2
получить все данные из таблицы
db.student.find({})
ВЫБРАТЬ * ОТ студента
получить все данные из таблицы без _id
db.student.find({}, {_id:0})
ВЫБЕРИТЕ имя, бросьте ОТ студента
получить все данные из одного поля с помощью _id
db.student.find({}, {roll:1})
ВЫБЕРИТЕ id, бросьте ОТ студента
получить все данные из одного поля без _id
db.student.find({}, {roll:1, _id:0})
ВЫБЕРИТЕ ролл ОТ студента
найти указанные данные, используя предложение where
db.student.find({roll: 80})
ВЫБЕРИТЕ * ОТ ШКОЛЬНИКОВ, ГДЕ roll = ’80’
найти данные, используя условие where и значение больше, чем условие
db.student.find({ «roll»: { $gt: 70 }}) // $gt is greater than
ВЫБЕРИТЕ * ОТ ШКОЛЬНИКА, куда катитесь> 70 ‘
найти данные, используя условие where и больше или равно условию
db.student.find({ «roll»: { $gte: 70 }}) // $gte is greater than or equal
ВЫБЕРИТЕ * ОТ ШКОЛЬНИКА, куда катитесь> = ’70’
найти данные, используя условие where и меньше или равно условию
db.student.find({ «roll»: { $lte: 70 }}) // $lte is less than or equal
ВЫБЕРИТЕ * ОТ ШКОЛА, ГДЕ бросается & lt; = ’70’
найти данные, используя условие where и меньше чем условие
db.student.find({ «roll»: { $lt: 70 }}) // $lt is less than
ВЫБЕРИТЕ * ОТ ШКОЛЬНИКА, ГДЕ бросить ’70’
Ответ №3
Я думаю, что mattingly890 имеет правильный ответ, вот еще один пример с шаблоном /commmand
db.collection.find( {}, {your_key:1, _id:0})
Ответ №4
Только для образовательных целей вы также можете сделать это одним из следующих способов:
1.
var query = {«roll»: {$gt: 70}; var cursor = db.student.find(query); cursor.project({«roll»:1, «_id»:0});
2.
var query = {«roll»: {$gt: 70}; var projection = {«roll»:1, «_id»:0}; var cursor = db.student.find(query,projection);
`
Ответ №5
Попробуйте выполнить следующий запрос:
db.student.find({}, {roll: 1, _id: 0}).pretty();
Надеюсь, это поможет!
Ответ №6
Вот, пожалуйста, 3 способа сделать, от кратчайшего до скучного:
db.student.find({}, ‘roll _id’); // <— Just multiple fields name space separated // OR db.student.find({}).select(‘roll _id’); // <— Just multiple fields name space separated // OR db.student.find({}, {‘roll’ : 1 , ‘_id’ : 1 ); // <—- Old lengthy boring way
Для удаления конкретного поля используйте — оператор:
db.student.find({}).select(‘roll -_id’) // <— Will remove id from result Ответ №7db.<collection>.find({}, {field1: <value>, field2: <value> …})
В вашем примере вы можете сделать что-то вроде:
db.students.find({}, {«roll»:true, «_id»:false})
Projection
Проекционные
Параметр проекции определяет, какие поля возвращаются в соответствующие документы. Параметр проекции принимает документ следующая форма:
{ field1: <value>, field2: <value> … }
The <value> can be any of the following:
1 или true, чтобы включить поле в возвращаемые документы.
0 или false, чтобы исключить поле.
Примечание
Для поля _id вам не нужно явно указывать _id: 1 для вернуть поле _id. Метод find() всегда возвращает поле _id если вы не укажете _id: 0 для подавления поля.
ЧИТАТЬ ДАЛЕЕ
Ответ №8
Хотя gowtham answer завершен, стоит отметить, что эти команды могут отличаться от API к другому (для тех, кто не использует оболочку mongo).
Для получения подробной информации, пожалуйста, обратитесь к ссылке на документацию.
Например, у Nodejs есть метод с названием ‘projection, который вы добавляете в свою функцию find для проецирования.
Следуя тому же набору примеров, команды, подобные приведенным ниже, можно использовать с Node:
db.student.find({}).project({roll:1})
ВЫБЕРИТЕ _id, сверните ОТ студента
Или
db.student.find({}).project({roll:1, _id: 0})
ВЫБЕРИТЕ ролл ОТ студента
и так далее.
Опять же, для пользователей nodejs, не забудьте (с чем вы уже должны быть знакомы, если раньше использовали этот API), чтобы использовать toArray для добавления своей команды .then.
Ответ №9
Это работает для меня,
db.student.find({},{«roll»:1})
нет условия в предложении where, т.е. внутри первых фигурных скобок. внутри следующих фигурных скобок: список имен полей проекции, которые необходимо указать в результате, а 1 указывает, что конкретное поле является частью результата запроса
Ответ №10
Для лучшего понимания я написал похожий запрос MySQL.
Selecting specific fields
MongoDB: db.collection_name.find({}, {name: true, email: true, phone: true});
MySQL: ВЫБЕРИТЕ имя, адрес электронной почты, телефон ОТ таблицы_имя;
Selecting specific fields with where clause
MongoDB: db.collection_name.find({электронная почта:’you@email.com ‘}, {имя: правда, электронная почта: правда, телефон: правда});
MySQL: ВЫБЕРИТЕ имя, адрес электронной почты, телефон ОТ таблицы имя_ГДЕ адрес электронной почты = ‘you@email.com’;
Ответ №11
получение имени студента
student-details = db.students.find({{ «roll»: {$gt: 70} },{«name»: 1, «_id»: False})
получение имени и роли ученика
student-details = db.students.find({{ «roll»: {$gt: 70}},{«name»: 1,»roll»:1,»_id»: False}) Ответ №12
Запрос на сборы MongoDB здесь – это сбор, а описание – поле.
db.getCollection(‘fees’).find({},{description:1,_id:0}) Ответ №13db.student.find({}, {«roll»:1, «_id»:0})
Это эквивалентно –
Выберите рулон из ученика
db.student.find({}, { “roll”: 1, “name”: 1, “_id”: 0})
Это эквивалентно –
Выберите рулон, имя из ученика
Ответ №14
Используйте этот запрос в оболочке:
1. Используйте database_name
e.g: use database_name
2.. При совпадении возвращает только информацию о конкретной полевой информации, _id:0 указывает не отображать идентификатор в результате
db.collection_name.find( { «Search_Field»: «value» }, { «Field_to_display»: 1,_id:0 } ) Ответ №15
В mongodb 3.4 мы можем использовать ниже логику, я не уверен в предыдущих версиях
выберите рулон из ученика == > db.student.find(! {}, {roll: 1})
приведенная выше логика помогает определить некоторые столбцы (если они меньше)
Ответ №16
Если вы хотите получить поле “Roll” только для всех 10 записей в коллекциях. Тогда попробуй это.
В MongoDb:
db.students.find({}, {“roll”: {“$ roll”})
В Sql:
выбрать ролл от студентов
Ответ №17
Я просто хочу добавить к ответам, что если вы хотите отобразить поле, вложенное в другой объект, вы можете использовать следующий синтаксис
db.collection.find( {}, {{‘object.key’: true}})
Здесь ключ присутствует внутри объекта с именем object
{ «_id» : ObjectId(«5d2ef0702385»), «object» : { «key» : «value» } } Ответ №18
Используя Studio 3T для MongoDB, если я использую .find({}, { _id: 0, roll: true }), он все равно возвращает массив объектов с пустым свойством _id.
Использование JavaScript map помогло мне получить только желаемое свойство roll в виде массива строк:
var rolls = db.student .find({ roll: { $gt: 70 } }) // query where role > 70 .map(x => x.roll); // return an array of role