How to Avoid Duplicate Entries in MongoDb Meteor App -


how avoid duplicate entries in mongodb in meteor application.

on command: db.products.find({},{"template_name": 1},{unique : true})

{ "_id" : objectid("5555d0a16ce3b01bb759a771"), "template_name" : "b" } { "_id" : objectid("5555d0b46ce3b01bb759a772"), "template_name" : "a" } { "_id" : objectid("5555d0c86ce3b01bb759a773"), "template_name" : "c" } { "_id" : objectid("5555d0f86ce3b01bb759a774"), "template_name" : "c" } { "_id" : objectid("5555d1026ce3b01bb759a775"), "template_name" : "a" } { "_id" : objectid("5555d1086ce3b01bb759a776"), "template_name" : "b" } 

i want retrieve unique template names , show them on html page.

use aggregation framework pipeline stages consist of $group , $project operators respectively. $group operator step groups input documents given key , return distinct documents in result. $project operator reshapes each document in stream, such adding new fields or removing existing fields:

db.products.aggregate([     {         "$group": {             "_id": "$template_name"         }     },     {         "$project": {             "_id": 0,             "template_name": "$_id"         }     } ]) 

result:

/* 0 */ {     "result" : [          {             "template_name" : "c"         },          {             "template_name" : "a"         },          {             "template_name" : "b"         }     ],     "ok" : 1 } 

you use meteorhacks:aggregate package implement aggregation in meteor:

add app with

meteor add meteorhacks:aggregate 

then use .aggregate function below.

var products = new mongo.collection('products'); var pipeline = [         {             "$group": {                 "_id": "$template_name"             }         },         {             "$project": {                 "_id": 0,                 "template_name": "$_id"             }         }     ]; var result = products.aggregate(pipeline); 

-- update --

an alternative doesn't use aggregation using underscore's methods return distinct field values collection's find method follows:

var distincttemplatenames = _.uniq(collection.find({}, {     sort: {"template_name": 1}, fields: {"template_name": true} }).fetch().map(function(x) {     return x.template_name; }), true) 

;

this return array distinct product template names ["a", "b", "c"]

you can check out tutorials explain above approach in detail: get unique values collection in meteor , meteor – distinct mongodb query.


Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -