Mongo - Intermediate Mongo
Lesson Objectives
- Use intermediate find operators
- Explain update operators
- Explain upserts
- Explain multiple updates
Use intermediate find operators
To find all the documents in our collection that have a weight property greater than 700, we run:
db.employees.find({
weight: {
$gt: 700,
},
});
There are several comparisons we can perform
- $lt (less than)
- $lte (less than or equal to)
- $gt (greater than)
- $gte (greater than or equal to)
- $ne (not equal to)
- $exists (does the property exist on an object -- either true or false)
- $in (does the value exist within the given array)
If the field is an array, you can search for a match within that array
db.employees.find({
loves: "energon",
});
If the object you pass into find() has more than one attribute, it will return documents that match both criteria. This is called an AND statement (like &&)
db.employees.find({
gender: "m",
weight: {
$gt: 700,
},
});
To find all documents that match at least one of a set of criteria, use an OR statement (like ||)
db.employees.find({
$or: [
{
loves: "apple",
},
{
weight: {
$lt: 500,
},
},
],
});
To find documents that have a value that matches multiple criteria, pass an object that contains both tests. This is similar to an AND (&&), but for one property. If you try to do a normal AND statement, but use the same property, twice it won't work.
db.employees.find({
salary: {
$gte: 80,
$lte: 165,
},
});
Explain intermediate update operators
We can increase a specific value
db.employees.update(
{
name: "Pilot",
},
{
$inc: {
salary: -2,
},
}
);
Multiple a value
db.employees.update(
{
name: "Pilot",
},
{
$mul: {
salary: 1 / 2,
},
}
);
Push a value onto an array
db.employees.update(
{
name: "Aurora",
},
{
$push: {
loves: "sugar",
},
}
);
Pop a value off an array
db.employees.update(
{
name: "Aurora",
},
{
$pop: {
loves: 1,
},
}
);
Remove a property altogether
db.employees.update(
{
name: "Aurora",
},
{
$unset: {
loves: "",
},
}
);
Rename a field
db.employees.update(
{
name: "Aurora",
},
{
$rename: {
wrong_field_name: "correct_field_name",
},
}
);
For more operators, look here: http://docs.mongodb.org/manual/reference/operator/update/#update-operators
Explain upserts
Upserts will insert a value if it doesn't exist. If it does, it will update it.
Normal:
db.hits.update(
{
page: "employees",
},
{
$inc: {
hits: 1,
},
}
);
db.hits.find();
Upsert:
db.hits.update(
{
page: "employees",
},
{
$inc: {
hits: 1,
},
},
{
upsert: true,
}
);
db.hits.find();
db.hits.update(
{
page: "employees",
},
{
$inc: {
hits: 1,
},
},
{
upsert: true,
}
);
db.hits.find();