How to select a single field for all documents in a MongoDB collection? – Dev

The best answers to the question “How to select a single field for all documents in a MongoDB collection?” in the category Dev.

QUESTION:

In my MongoDB, I have a student collection with 10 records having fields name and roll. One record of this collection is:

{
    "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
    "name" : "Swati",
    "roll" : "80",
}

I want to retrieve the field roll only for all 10 records in the collection as we would do in traditional database by using:

SELECT roll FROM student

I went through many blogs but all are resulting in a query which must have WHERE clause in it, for example:

db.students.find({ "roll": { $gt: 70 })

The query is equivalent to:

SELECT * FROM student WHERE roll > 70

My requirement is to find a single key only without any condition. So, what is the query operation for that.

ANSWER:

get all data from table

db.student.find({})

SELECT * FROM student


get all data from table without _id

db.student.find({}, {_id:0})

SELECT name, roll FROM student


get all data from one field with _id

db.student.find({}, {roll:1})

SELECT id, roll FROM student


get all data from one field without _id

db.student.find({}, {roll:1, _id:0})

SELECT roll FROM student


find specified data using where clause

db.student.find({roll: 80})

SELECT * FROM students WHERE roll=”80″


find a data using where clause and greater than condition

db.student.find({ "roll": { $gt: 70 }}) // $gt is greater than 

SELECT * FROM student WHERE roll > ’70’


find a data using where clause and greater than or equal to condition

db.student.find({ "roll": { $gte: 70 }}) // $gte is greater than or equal

SELECT * FROM student WHERE roll >= ’70’


find a data using where clause and less than or equal to condition

db.student.find({ "roll": { $lte: 70 }}) // $lte is less than or equal

SELECT * FROM student WHERE roll <= ’70’


find a data using where clause and less than to condition

db.student.find({ "roll": { $lt: 70 }})  // $lt is less than

SELECT * FROM student WHERE roll < ’70’

ANSWER:

From the MongoDB docs:

A projection can explicitly include several fields. In the following operation, find() method returns all documents that match the query. In the result set, only the item and qty fields and, by default, the _id field return in the matching documents.

db.inventory.find( { type: 'food' }, { item: 1, qty: 1 } )

In this example from the folks at Mongo, the returned documents will contain only the fields of item, qty, and _id.


Thus, you should be able to issue a statement such as:

db.students.find({}, {roll:1, _id:0})

The above statement will select all documents in the students collection, and the returned document will return only the roll field (and exclude the _id).

If we don’t mention _id:0 the fields returned will be roll and _id. The ‘_id’ field is always displayed by default. So we need to explicitly mention _id:0 along with roll.

ANSWER:

Here you go , 3 ways of doing , Shortest to boring :

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

To remove specific field use - operator :

db.student.find({}).select('roll -_id') // <--- Will remove id from result

ANSWER:

I think mattingly890 has the correct answer , here is another example along with the pattern/commmand

db.collection.find( {}, {your_key:1, _id:0})

enter image description here