Difference between revisions of "MongoDB QueryData"

From mi-linux
Jump to navigationJump to search
Line 40: Line 40:
 
  db.dept.find({deptno:10}).pretty()
 
  db.dept.find({deptno:10}).pretty()
  
== Find with Query Criteria ==
 
 
The query criteria can be as complex as that found in SQL.
 
 
To find all employees earning more than 2000 in department 10:
 
 
db.deptCollection.find({deptno:10}, 
 
  { employees: {$elemMatch: {sal: { $gt: 2000}}}}).pretty()
 
 
 
Same again for department 20 and the managers:
 
db.deptCollection.find({deptno:20},  { employees: {$elemMatch: {sal: { $gt: 2000}, job: "MANAGER"}}}).pretty()
 
 
 
'''employees''' is an array, so $elemMatch only returns the first matching value. What if we try this instead:
 
 
db.deptCollection.find({ "employees.sal" : { $gt: 2000}}).pretty()
 
 
Things to note:
 
* This time employees.sal must be enclosed in matching single or double quotes.
 
* Comment on what the above query returns.
 
* If you examine the data carefully:
 
** either '''find()''' means if one element of an array is found to be true, then all the elements are returned, even if they do not satisfy the query criteria
 
** or including '''$elemMatch''' means only the first element matching the query criteria is returned.
 
* Is this good practice?
 
 
 
Find departments with no managers:
 
 
db.deptCollection.find({ "employees.job" : { $ne: "MANAGER"}}).pretty()
 
  
  

Revision as of 11:35, 11 November 2017

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 data comes back messy. The pretty() function can be used to improve the layout::

db.dept.find().pretty()


Find One document

To find just one document - department 10:

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


Next Step

MongoDB Aggregation Pipeline