Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I query for distinct values in Mongoose?

I have a problem where I want to be able to get all the unique cities for a collection, and my code looks something like this:

var mongoose = require("mongoose"), Schema = mongoose.Schema;  var PersonSchema = new Schema({     name: String,     born_in_city: String }); var Person = mongoose.model('Person', PersonSchema); 

In native MongoDb I could just do db.person.distinct("born_in_city"), but there doesn't seem to be anything equivalent for Mongoose. Is the only option to iterate over all of the documents myself to do this, or is there a better solution?

In an attempt to use the underlying node-mongodb-native as suggested by the answerer I attempted to do this:

mongoose.connection.db.collections(function(err, collections){   collections[0].distinct('born_in_city', function( err, results ){     console.log( err, results );   }); }); 

However the results is empty and there's no error. I would also prefer to be able to fetch only the needed collection by name rather than have to filter what collections return if at all possible.

like image 501
Kit Sunde Avatar asked May 18 '11 11:05

Kit Sunde


People also ask

How can I get distinct values from a field in MongoDB?

To get distinct values, use distinct() in MongoDB. It finds the distinct values for a specified field across a single collection or view and returns the results in an array.

What does unique do in Mongoose?

The unique option tells Mongoose that each document must have a unique value for a given path. For example, below is how you can tell Mongoose that a user's email must be unique. const mongoose = require('mongoose'); const userSchema = new mongoose.

Which command gives all the distinct values in MongoDB?

MongoDB – Distinct() Method In MongoDB, the distinct() method finds the distinct values for a given field across a single collection and returns the results in an array. It takes three parameters first one is the field for which to return distinct values and the others are optional.

How do I use distinct aggregation in MongoDB?

You can use $addToSet with the aggregation framework to count distinct objects. Not a generic solution, if you have a large number of unique zip codes per result, this array would be very large.


1 Answers

Just to give an update for Mongoose 3.x:

MyModel.find().distinct('_id', function(error, ids) {     // ids is an array of all ObjectIds }); 
like image 94
Risadinha Avatar answered Oct 06 '22 23:10

Risadinha