Querying with MongoDB
First, To get start with MongoDB, you need to install it and connect to the MongoDB shell.
Querying:
Putting stuff in the database is all well and good, but you’ll probably want to query the database to get data from it.
Cursor: It returns all documents matching a specific query. To access the documents, you need to iterate the cursor.
Consider a collection "User" with the following document
{
  _id: 1,
  name: "mp",
  age: 10,
  email: "[email protected]",
  intrests: {
    name: "painting",
    type: "art"
  }
  skills: [ "mongodb", "mysql" ],
}Wrapped Queries:
Like Query:
db.user.find({"name": "mp"})
	db.user.findOne({"email": "[email protected]"})Differences between find() and findone()
The two queries you are executing are very different. A find query returns a cursor, and has no actual data is returned (only the cursor information). If you call findOne, then you are actually returning the data and closing the cursor.
Sort Query: 1 for ascending sort, -1 for descending sort
db.user.find().sort({"age":-1})Limit Query:
db.user.find().limit(10)Count Query:
db.user.find().count()Query Using Modifiers:
Not Equal Modifier($ne):
db.user.find({"age": {$ne: 20}})    # Returns Cursor with the documents having age not equal to 20Greater/Less than Modifier($gt, $lt, $gte, $lte):
db.user.find({"age": {$gt: 20}})
db.user.find({"age": {$lt: 20}})
db.user.find({"age": {$gte: 20}})
db.user.find({"age": {$lte: 20}})Increment Modifier:
db.User.update({"name": "mp"}, {"$inc": {"age": "newValue"}})       Updates the value of age which collection having name has "mp"Set Modifier: "$set" will add a new field with the specified value, provided that the new field does not violate a type constraint.
Set fields in Embedded Documents:
db.user.update(
	   { _id: 1 },
	   { $set: { "intrest.type": "zzz" } }
)Set Elements in Array: This updates the value specified, second element(array index of 1) in the skills field
db.products.update(
	   { _id: 1 },
	   { $set:
	      {
	        "skills.1": "newValue",
	      }
	   }
	)Key-Value will be created if the key does not exists in the case of both "$inc" and "$set"
Push Modifier($push):
"$push" adds an element to the end of an array if the specified key exists and creates a new array if it does not.
Append Multiple Values to an Array:
db.user.update({ "name": "mp" },
	               { $push:
	                   { friends:
	                       { $each: [ "xyz", "xyz", "xyz" ]
	                       }
	                   }
	               })This appends each element of [ "xyz", "xyz", "xyz" ] to the friends array for the document where the name field equals mp.
AddToSet Modifier($addToSet):
The "$addToSet" operator adds a value to an array unless the value is already present, if the value is in the array it will not append.
{ _id: 1, company_name: "micropyramid", employees: [ "emp1", "emp2" ] } This is the collection of Companydb.company.update({_id: 1},
	        { $addToSet:
	            { employees: "emp3" }
	        })This appends "emp3" to the array employees of the company name "micropyramid".
result: { _id: 1, company_name: "micropyramid", employees: [ "emp1", "emp2", "emp3" ] }Using "$each" Modifier:
db.company.update({_id: 1},
	{ $addToSet:
	    { employees:
	        {"$each": ["emp3", "emp4", "emp1"]
	        }
	    }
})result: { _id: 1,
          company_name: "micropyramid",
          employees: [ "emp1", "emp2", "emp3", "emp4" ]
        }Pop Modifier($pop):
"$pop" Removes first or the last element of an array, -1 to remove the first element of an array and 1 to remove the last element in an array.
db.company.update( { _id: 1 }, { $pop: { employees: -1 } } )    it removes "emp1" in the employees array
db.company.update( { _id: 1 }, { $pop: { employees: 1 } } )   it removes "emp4" in the employees arrayOR Queries:
There are two ways to do OR query "$or"
1. "$in" can be used for a variety of values for a single key.
db.company.find(
        {"employees":
            {"$in": ["emp1", "emp2"]}
        })
2. "$or" can be used to query for any of the given valuesacross multiple keys
    ex: db.user.find({"$or":
            [
                {"age": 10},
                {"intrests.name": "painting"}
            ]
    })AND Queries:
db.company.find(
                {"employees":
                    {"$all": ["emp1", "emp2"]}
                })Below query will do exact match, considering order also, if order changes it will not show any result
db.company.find(
                {"employees":
                    ["emp1", "emp2"]
                })