(1) explore mongo shell
mongod
another terminal: mongo
>db
>use learning_mongo // use learning_mongo as db
>show dbs
>db.cars.insert({"make": "subaru"}) // cars is collection, {"make":"subaru"} is document
> show collections
cars
> for (i=0; i<10000;i++) {
db.numbers.insert({"number":i})
}
>db.numbers.count()
>db.numbers.find({"number":1)
>db.numbers.find({"number":1).explain()
>db.numbers.find({"number":1).explain("executionStats")
>db.numbers.createIndex({number:1})
https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/
A document that contains the field and value pairs where the field is the index key and the value describes the type of index for that field. For an ascending index on a field, specify a value of |
>db.numbers.find({"number":1).explain("executionStats")
import data into mongodb
ctrl + c to quit
>mongoimport --help
navigate to the file folder
namespace options : database and collection
--file --jsonArray
> mongoimport --db learning_mongo --collection tours --jsonArray --file tours.json
>use learning_mongo
>show collections
>db.tours.count()
>db.tours.find({"tourTags": "hiking"})
CRUD
>use learning_mongo
>db.tours.find("tourTags":"wine"})
>db.tours.insert({
"tourName":"The Wines of Santa Cruz",
"tourLenght":3,
"tourDescription":"Discover Santa Cruz's wineries",
"tourTags": ["wine, "Santa Cruz"]
})
>db.tours.update({"tourName": "The Wines of Santa Cruz"},
{$set: {"tourTegion": "Central Coast"}})
>db.tours.update({"tourName":"The Wines of Santa Cruz",
{$addToSet: {"tourTags": 'boardwalk"}})
>db.tours.remove({"tourName":"The Wines of Santa Cruz"})
>db.tours.drop() //remove collection tour
>mongoimport --db learning_mongo --collection tours --jsonArray --file tours.json
>mongo
>use learning_mongo
>db.tours.find({"tourPackage":"Taste of California"}).explain("executionStats")
"totalDocsExamined":29
>db.tours.createIndex({tourPackage:1})
>db.tours.find({"tourPackage":"Taste of California"}).explain("executionStats")
"totalDocsExamined": 4
>db.tours.find(
{"tourPrice": {$lte:500},
"tourLength":{$lte:3}})
>db.tours.createIndex({tourPrice:1, tourlength:1})
>db.tours.createIndex({tourDescription: "text", tourBlurb:"text"})
https://mongodb.github.io/node-mongodb-native/3.2/tutorials/create-indexes/
>db.tours.find({$text: {$search:"wine"}})
https://docs.mongodb.com/manual/reference/method/db.collection.find/#db.collection.find
{
$text:
{
$search: <string>,
$language: <string>,
$caseSensitive: <boolean>,
$diacriticSensitive: <boolean>
}
}
https://docs.mongodb.com/manual/reference/operator/query/text/#op._S_text
sort by tourPrice
>db.tours.find({}. {tourName:1, _id:0}).pretty().sort({tourPrice:-1}).skip(20).limit(1)
sort by textScore
>db.tours.find({$text:{$search:"wine"}}, {score: {$meta:"textScore"}}).pretty().sort({score:{$meta: "textScore"}})
https://docs.mongodb.com/manual/reference/method/cursor.sort/#sort-metadata
https://docs.mongodb.com/manual/reference/operator/projection/meta/#proj._S_meta
https://docs.mongodb.com/manual/reference/method/db.collection.find/#find-projection
>db.tours.find({$text:{$search:"wine"}}, {score:{$meta:"textScore"}, tourName:1, _id:0}).sort({score:{$meta:"textScore"}})
regex
> db.tours.find({tourDescription:{$regex:/backpack/i}}, {tourName:1,_id:0})
>db.tours.find({tourDescription:/backpack/i}, {tourName:1,_id:0})
Model your schema
Aggregation
>db.tours.count({tourPackage:"Cycle California"})
>db.tours.aggregate([{$group: {_id: '$tourPackage', count: {$sum:1}}}])
>db.tours.aggregate([{$group: {_id:'$tourPackage', average: {$avg: '$tourPrice'}, count:{$sum:1} } }])