Skip to content

Instantly share code, notes, and snippets.

@subfuzion
Created February 26, 2014 19:03
Show Gist options
  • Save subfuzion/9236165 to your computer and use it in GitHub Desktop.
Save subfuzion/9236165 to your computer and use it in GitHub Desktop.
mongoose cheatsheet

Definitely not comprehensive. This is meant to be a basic memory aid with links to get more details. I'll add to it over time.

Install

$ npm install mongoose --save

Connect

const mongoose = require('mongoose');

const uri = process.env.MONGO_URI || 'mongodb://localhost/test';

mongoose.connect(uri, function(err, res) {
  ...
});

Defining a schema

const userSchema = new mongoose.Schema({
  name: {
    first: String,
    last: { type: String, trim: true }
  },
  age: { type: Number, min: 0 },
  posts: [ { title: String, url: String, date: Date } ],
  updated: { type: Date, default: Date.now }
});
SchemaTypes
  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array

SchemaTypes
SchemaType API
SchemaType#default
SchemaType#validate
get
set
select

Notes

Mixed types and dates that are modified using JavaScript Date methods are not hooked into mongoose change tracking logic. To save changes, let mongoose know about them using markModified('path') before calling save.

Instantiating a model

A model is a constructor compiled from a schema. Model instances represent documents.

const User = mongoose.model('User', userSchema);

var u = new User({
  name: {
    first: 'Tony',
    last: 'Pujals'
  },
  age: 99
});

Query

query

$where
query.$where('this.comments.length > 10 || this.name.length > 5')

// or

query.$where(function() {
  return this.comments.length > 10 || this.name.length > 5;
});

mongoDB $where

$all

mongoose $all
mongoDB $all

$count

http://mongoosejs.com/docs/api.html#query_Query-count

$distinct

http://mongoosejs.com/docs/api.html#query_Query-distinct

#elemMatch

http://mongoosejs.com/docs/api.html#query_Query-elemMatch

#equals

http://mongoosejs.com/docs/api.html#query_Query-equals

#exec

http://mongoosejs.com/docs/api.html#query_Query-exec

#exists

http://mongoosejs.com/docs/api.html#query_Query-exists

#find

http://mongoosejs.com/docs/api.html#query_Query-find

findOne

http://mongoosejs.com/docs/api.html#query_Query-findOne

findOneAndRemove

http://mongoosejs.com/docs/api.html#query_Query-findOneAndRemove

findOneAndUpdate

http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate

#gt

http://mongoosejs.com/docs/api.html#query_Query-gt

#gte

http://mongoosejs.com/docs/api.html#query_Query-gte

#hint

http://mongoosejs.com/docs/api.html#query_Query-hint

#in

http://mongoosejs.com/docs/api.html#query_Query-in

#lean

http://mongoosejs.com/docs/api.html#query_Query-lean

#limit

http://mongoosejs.com/docs/api.html#query_Query-limit

#lt

http://mongoosejs.com/docs/api.html#query_Query-lt

#lte

http://mongoosejs.com/docs/api.html#query_Query-lte

#maxScan

http://mongoosejs.com/docs/api.html#query_Query-maxScan

#merge

http://mongoosejs.com/docs/api.html#query_Query-merge

#mod

http://mongoosejs.com/docs/api.html#query_Query-mod

#ne

http://mongoosejs.com/docs/api.html#query_Query-ne

#nin

http://mongoosejs.com/docs/api.html#query_Query-nin

#nor

http://mongoosejs.com/docs/api.html#query_Query-nor

#or

http://mongoosejs.com/docs/api.html#query_Query-or

#populate

http://mongoosejs.com/docs/api.html#query_Query-populate

#read

http://mongoosejs.com/docs/api.html#query_Query-read

#regex

http://mongoosejs.com/docs/api.html#query_Query-regex

#remove

http://mongoosejs.com/docs/api.html#query_Query-remove

#select

http://mongoosejs.com/docs/api.html#query_Query-select

#setOptions

http://mongoosejs.com/docs/api.html#query_Query-setOptions

#size

http://mongoosejs.com/docs/api.html#query_Query-size

#skip

http://mongoosejs.com/docs/api.html#query_Query-skip

#slice

http://mongoosejs.com/docs/api.html#query_Query-slice

#snapshot

http://mongoosejs.com/docs/api.html#query_Query-snapshot

#sort

http://mongoosejs.com/docs/api.html#query_Query-sort

#stream

http://mongoosejs.com/docs/api.html#query_Query-stream

#tailable

http://mongoosejs.com/docs/api.html#query_Query-tailable

#toConstructor

http://mongoosejs.com/docs/api.html#query_Query-toConstructor

#update

http://mongoosejs.com/docs/api.html#query_Query-update

#where

http://mongoosejs.com/docs/api.html#query_Query-where

@obendesmond
Copy link

Thanks man, i think it will be
better if you just put examples in place of links

@obendesmond
Copy link

I think that will help

@subfuzion
Copy link
Author

@obendesmond Wow, I actually forgot I wrote this gist six years ago. It was when I was programming in Node and just exploring Mongoose a bit. I think I did have the best of intentions to augment this over time, but it was really just something I was noting down for myself that I decided to share in case anyone else found it useful. However, I ended up preferring to code directly with the Mongo client instead of using a layer in between, so I never continued using Mongoose. That was a long time ago and I've been programming primarily in Go since around 2016. Cheers!

@obendesmond
Copy link

Nice! Thanks

@beesanderson
Copy link

This is awesome, thank you!!

@Jkudjo
Copy link

Jkudjo commented Jul 9, 2022

Awesome. Thanks for this

@kativenOG
Copy link

thanks !

@tush8788
Copy link

Awesome.

Copy link

ghost commented Jan 1, 2023

great

@tanvirstreame
Copy link

Great

@ayushsharma08
Copy link

middleware missing

@buraxta
Copy link

buraxta commented Jul 17, 2024

You inspired me and make me do this: https://gist.github.com/buraxta/dbf354def32000678bacaa00ce9fd210 Thank you for this useful gist!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment