Skip to main content

Mongo - Intermediate Mongo

Lesson Objectives​

  1. Use intermediate find operators
  2. Explain update operators
  3. Explain upserts
  4. 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();