MongoDB QueryData

From mi-linux
Revision as of 14:13, 5 March 2018 by Cm1958 (talk | contribs) (→‎Find with query criteria)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Main Page >> MongoDB >>MongoDB Workbook >> Querying Collections

Querying a collection

The find() function can be used to query the documents.

The format is:

 db.collectionName.find(optional_query_criteria)

Where the query_criteria follows a pattern:

 db.collectionName.find({keyField: "value"})

Note:

  • the criteria is enclosed in curly brackets: {}
  • the value needs quotes if it is a string or date value
  • all names and values are case sensitive
  • quotes are optional for the fieldName, so long as they do not contain spaces


Find all documents

For example, show all the data so far in the dept collection:

db.dept.find()

The results should look like:

{ "_id" : 10, "deptno" : 10, "dname" : "ACCOUNTING", "loc" : "NEW YORK" }
{ "_id" : 20, "deptno" : 20, "dname" : "RESEARCH", "loc" : "DALLAS" }
{ "_id" : 40, "deptno" : 40, "dname" : "OPERATIONS", "loc" : "BOSTON" }
{ "_id" : 50, "deptno" : 40, "dname" : "OPERATIONS V2", "loc" : "BOSTON" }
{ "_id" : 30, "deptno" : 30, "dname" : "SALES", "loc" : "CHICAGO" }

To show the documents in the emp collection:

db.emp.find()


The data comes back messy. The pretty() function can be used to improve the layout:

db.emp.find().pretty()

A subset of the emp collection is shown below:

> db.emp.find().pretty()
{
        "_id" : ObjectId("5a09e79ac536e890d5a7a666"),
        "empno" : 7782,
        "ename" : "CLARK",
        "job" : "MANAGER",
        "mgr" : 7839,
        "hiredate" : ISODate("1989-06-09T00:00:00Z"),
        "sal" : 2450,
        "deptno" : 10
}
{
        "_id" : ObjectId("5a09e79ac536e890d5a7a667"),
        "empno" : 7839,
        "ename" : "KING",
        "job" : "PRESIDENT",
        "hiredate" : ISODate("1980-11-17T00:00:00Z"),
        "sal" : 5000,
        "deptno" : 10
}
....

Note the object ids are now system generated (and will be different values in your own data).

Find with query criteria

If working with a large collection, you will not want all the documents returned.

Find all the employees are are clerks:

 db.emp.find({job:"CLERK"})

For numerical data, the greater than (>) and less than (<) operators are represented by $gt and $lt respectively. Note, for these operators, the search criteria must be enclosed in {} brackets.

Find all employees who earn more than 2400:

db.emp.find({sal: {$gt:2400}})

Find all employees whose commission is less than 1000:

db.emp.find({comm: {$lt:1000}})

Working with the date field (hiredate) is more complex, since you have to create a new date for the comparison.

For example, find all employees who start after the 1st January 2000:

db.emp.find({hiredate: {$lt: new Date("2000-01-01")}})

Find employees who started on the 16th October 2015:

db.emp.find({hiredate: new Date("2015-10-16")})

Find One document

To find just one document requires the use of the equivalent of a primary key field. This can be a field that the user takes responsibility to keep unique, such as the deptno:

db.dept.find({deptno:10})


Or the object id can be used, which will be unique:

db.dept.find({_id:10})


In the emp collection, the _ids are system generated and generally along the lines of: '5a0727e99ba81dee9b1cc6a3', so less easy to use!

List all the records in emp:

db.emp.find().pretty()

and pick an _id from the collection and then try and find one record.

For example (note, your object id will be different):

db.emp.find( {_id : ObjectId("5a0727e99ba81dee9b1cc6a3")}).pretty()


The function ObjectId() must be used to convert the value into an object id.

Next Step

MongoDB Aggregation Pipeline