Cookies help us deliver our services. By using our services, you agree to our use of cookies. More information

Difference between revisions of "FIND Tutorial"

From NoSQLZoo
Jump to: navigation, search
 
(50 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<pre class="setup">
 
#ENCODING
 
import io
 
import sys
 
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-16')
 
#MONGO
 
from pymongo import MongoClient
 
client = MongoClient()
 
client.progzoo.authenticate('scott','tiger')
 
db = client['progzoo']
 
#PRETTY
 
import pprint
 
pp = pprint.PrettyPrinter(indent=4)
 
pp.print(list(
 
  QcQ
 
))
 
</pre>
 
 
 
==Working with the <code>world</code> collection of countries==
 
==Working with the <code>world</code> collection of countries==
  <p>This tutorial introduces NoSQL using MonogDB and PyMongo under Python3.4. We will be using the <code>find()</code> command and comparison functions on the collection '''world''' which contains details of around 250 countries of the world:</p>
+
<p>
 +
  This tutorial introduces NoSQL using MongoDB. We will be using the <syntaxhighlight lang="JavaScript" inline>find()</syntaxhighlight >
 +
  command and comparison functions on the collection '''world''' which contains details of around 250 countries of the world:
 +
</p>
 
[[FIND examples]] are available.
 
[[FIND examples]] are available.
 
<div class='extra_space' style='width:1em; height:6em;'></div>
 
<div class='extra_space' style='width:1em; height:6em;'></div>
<div class=q data-lang="py3">
+
==Show Germany==
Use <code>find()</code> to return the 21st document in world
+
<div class="q" data-lang="mongo">
<p class=strong>Show the 21st document in world</p>
+
Use <syntaxhighlight lang="JavaScript" inline>find()</syntaxhighlight> to show the details of Germany.
<pre class=def>
+
  <p class="strong">
    db.world.find()
+
    Show Germany instead of France.
</pre>
+
  </p>
<div class=ans>
+
  <pre class="def"><nowiki>db.world.find({name: 'France'});</nowiki></pre>
pp.pprint(db.world.find()[20])
+
  <pre class="ans"><nowiki>db.world.find({name: 'Germany'});  </nowiki></pre>
</div>
 
 
</div>
 
</div>
  
<div class=q data-lang="py3">
+
==Eurasia==
<p class=strong>List all the countries in the continent of Asia</p>
+
<div class="q" data-lang="mongo">
<pre class=def>
+
You can use <syntaxhighlight lang="JavaScript" inline>.pretty()</syntaxhighlight> to make the output more readable.
db.world.find({},{"capital":1, "_id":0})
+
  <p class="strong">
</pre>
+
    List all the countries in the continent of "Eurasia".
<div class=ans>
+
  </p>
pp.pprint(list(db.world.find({"continent":"Asia"}, {"_id":0, "name":1})))
+
  <pre class="def"><nowiki>db.world.find({name: 'Germany'}).pretty();</nowiki></pre>
</div>
+
  <pre class="ans"><nowiki>db.world.find({continent: "Eurasia"}).pretty(); </nowiki></pre>
 
</div>
 
</div>
  
<div class=q data-lang="py3">
+
==Find an area==
<p class=strong>List the countries in Europe that start with the letter "S"</p>
+
<div class="q" data-lang="mongo">
<pre class=def>
+
You can test numbers as well as strings.
</pre>
+
  <p class="strong">
<div class=ans>
+
    Find the country with an area of exactly 43094.
pp.pprint(list(
+
  </p>
  db.world.find({"name":{'$regex':"^S"},
+
  <pre class="def"><nowiki>db.world.find({gdp: 3425956000000}).pretty();</nowiki></pre>
                "continent":"Europe"},{"name":1, "_id":0})
+
  <pre class="ans"><nowiki>db.world.find({area: 43094}).pretty(); </nowiki></pre>
))
 
</div>
 
 
</div>
 
</div>
  
<div class=q data-lang="py3">
+
==Using $gt==
<p class=strong>Find the capital cities for countries with a population of over 70 million</p>
+
<div class="q" data-lang="mongo">
<pre class=def>
+
You can use '''$gt''' (greater than) and '''$lt''' (less than) to compare numbers and strings.
</pre>
+
<p class="strong">
<div class=ans>
+
  Show each country with a population of over 250000000 <br/>
pp.pprint(list(db.world.find({"population":{"$gt":70000000}},{"capital":1,"_id":0})))
+
  Sort the results alphabetically.
</div>
+
</p>
 +
<p>You will need to use a [[FIND_Examples#Using_a_projection_with_find|projection]] to answer this question.</p>
 +
<pre class="def"><nowiki>
 +
db.world.find(
 +
  {area: {$gt: 9000000}},
 +
  {name: 1, _id: 0}
 +
).sort(
 +
  {name: 1}
 +
).pretty();</nowiki></pre>
 +
<pre class="ans"><nowiki>db.world.find({population:{$gt:250000000}},{name:1,_id:0}).sort({name: 1}).pretty();</nowiki></pre>
 
</div>
 
</div>
  
<div class=q data-lang="py3">
+
==After S==
<p class=strong>Find the countries that have a population of over 100 million or less than a million</p>
+
<div class="q" data-lang="mongo">
<pre class=def>
+
Greater than and less than comparisons can also be applied to strings.
</pre>
+
  <p class="strong">
<div class=ans>
+
    List the countries that come after "S" in the alphabet.
pp.pprint(list(db.world.find({"$or":[{"population":{"$lt":1000000}},{"population":{"$gt":100000000}}]}, {"name":1, "_id":0})))
+
  </p>
</div>
+
  <pre class="def"><nowiki>db.world.find();</nowiki></pre>
 +
  <pre class="ans"><nowiki>db.world.find({name:{$gt:"S"}},{name:1,_id:0}).pretty();  </nowiki></pre>
 
</div>
 
</div>
  
<div class=q data-lang="py3">
+
==Name and Capital==
<p class=strong>Find the names of countries beginning with "U" that are outside of Europe and North America</p>
+
<div class="q" data-lang="mongo">
<pre class=def>
+
  <p class="strong">
</pre>
+
    Find the name and capital cities for countries with a population of over 70 million.
<div class=ans>
+
  </p>
pp.pprint(list(db.world.find({"$and":[{"name":{'$regex':"^U"}},{"continent":{"$nin":["Europe", "North America"]}}]},{"name":1,"_id":0})))
+
  <pre class="def"><nowiki>db.world.findOne();</nowiki></pre>
</div>
+
  <pre class="ans"><nowiki>db.world.find({population:{$gt:70000000}},{name:1,capital:1,_id:0}).pretty();</nowiki></pre>
 
</div>
 
</div>
  
<div class=q data-lang="py3">
+
==Using $or==
<p class=strong>Find the names of all countries that contain a white space </p>
+
<div class=q data-lang=mongo>
<pre class=def>
+
  <p class="strong">
</pre>
+
    Find the countries that have a population that is over 200 million or less than 20,000.
<div class=ans>
+
  </p>
pp.pprint(list(db.world.find({"name":{"$regex":"^.*\s.*$"}},{"name":1,"_id":0})))
+
  <pre class="def"><nowiki>
</div>
+
db.world.find(
</div>
+
  {$or: [
 
+
    {name: 'Germany'},
<div class=q data-lang="py3">
+
    {name: 'France'}
<p class=strong>Which country out of China, Russia, and the United States has the largest population.</p>
+
  ]},
You might want to use [[Sort]] and limit to get the answer.
+
  {name: 1, population: 1, _id: 0}
<pre class=def>
+
);</nowiki></pre>
</pre>
+
<pre class="ans"><nowiki>db.world.find({$or:[{population:{$gt:200000000}},{population:{$lt:20000}}]},{name:1,population:1,_id:0})</nowiki></pre>
<div class=ans>
 
pp.pprint(list(db.world.find({"name":{"$in":["China", "Russia", "United States"]}}).sort("population",-1).limit(1)))
 
</div>
 
</div>
 
 
 
<div class=q data-lang="py3">
 
Use [[Sort]] to find the last document in world
 
<p class=strong>Show the last document of world</p>
 
<pre class=def>
 
</pre>
 
<div class=ans>
 
pp.pprint(list(db.world.find().sort("$natural", -1))[0])
 
</div>
 
</div>
 
 
 
<div class=q data-lang="py3">
 
<p class=strong>Show capital and population for the top 5 capital cities starting with the letter "M" that have a population of less than 3 million  </p>
 
<pre class=def>
 
</pre>
 
<div class=ans>
 
pp.pprint(list(db.world.find({"$and":[{"capital":{"$regex":"^M"}},{"population":{"$lt":3000000}}]}, {"_id":0, "capital":1, "population":1}).sort("population",-1).limit(5)))
 
</div>
 
</div>
 
 
 
<div class=q data-lang="py3">
 
<p class=strong>Show all the capitals for countries that start with the same letter as their continent</p>
 
<div class=hint title="Using $where with find" >
 
  find({"$where": " boolean expression "})
 
</div>
 
<pre class=def>
 
</pre>
 
<div class=ans>
 
pp.pprint(list(
 
    db.world.find(
 
      {"$where":"this.name[0]==this.continent[0]"},
 
      {"_id":0, "capital":1})
 
))
 
</div>
 
 
</div>
 
</div>

Latest revision as of 19:29, 11 December 2020

Working with the world collection of countries

This tutorial introduces NoSQL using MongoDB. We will be using the find() command and comparison functions on the collection world which contains details of around 250 countries of the world:

FIND examples are available.

Show Germany

Use find() to show the details of Germany.

Show Germany instead of France.

db.world.find({name: 'France'});
db.world.find({name: 'Germany'});  

Eurasia

You can use .pretty() to make the output more readable.

List all the countries in the continent of "Eurasia".

db.world.find({name: 'Germany'}).pretty();
db.world.find({continent: "Eurasia"}).pretty(); 

Find an area

You can test numbers as well as strings.

Find the country with an area of exactly 43094.

db.world.find({gdp: 3425956000000}).pretty();
db.world.find({area: 43094}).pretty(); 

Using $gt

You can use $gt (greater than) and $lt (less than) to compare numbers and strings.

Show each country with a population of over 250000000
Sort the results alphabetically.

You will need to use a projection to answer this question.

db.world.find(
  {area: {$gt: 9000000}},
  {name: 1, _id: 0}
).sort(
  {name: 1}
).pretty();
db.world.find({population:{$gt:250000000}},{name:1,_id:0}).sort({name: 1}).pretty();

After S

Greater than and less than comparisons can also be applied to strings.

List the countries that come after "S" in the alphabet.

db.world.find();
db.world.find({name:{$gt:"S"}},{name:1,_id:0}).pretty();  

Name and Capital

Find the name and capital cities for countries with a population of over 70 million.

db.world.findOne();
db.world.find({population:{$gt:70000000}},{name:1,capital:1,_id:0}).pretty();

Using $or

Find the countries that have a population that is over 200 million or less than 20,000.

db.world.find(
  {$or: [
    {name: 'Germany'},
    {name: 'France'}
  ]},
  {name: 1, population: 1, _id: 0}
);
db.world.find({$or:[{population:{$gt:200000000}},{population:{$lt:20000}}]},{name:1,population:1,_id:0})