MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Implémentation de mongodb distinct() dans Meteor sur le serveur ?

Ok, après avoir fouillé dans le code et réalisé que mongo lib contient des implémentations natives de toutes les méthodes nécessaires, j'ai réutilisé la solution "aggregate()" de https://github.com/meteor/meteor/pull/644

Des modifications simples et une traduction en coffeescript donnent l'extrait suivant à insérer dans votre code côté serveur :

path = __meteor_bootstrap__.require("path")
MongoDB = __meteor_bootstrap__.require("mongodb")
Future = __meteor_bootstrap__.require(path.join("fibers", "future"))

myCollection = new Meteor.Collection "my_collection"

#hacky distinct() definition from https://github.com/meteor/meteor/pull/644
myCollection.distinct = (key)->
  future = new Future
  @find()._mongo.db.createCollection(@_name,(err,collection)=>
    future.throw err if err
    collection.distinct(key, (err,result)=>
      future.throw(err) if err
      future.ret([true,result])
      )
    )
  result = future.wait()
  throw result[1] if !result[0]
  result[1]

L'inconvénient est que vous devez le définir pour chaque nouvelle collection, mais c'est assez simple à corriger avec un autre hack via _.extend ou quelque chose que je suppose...

PS C'est aussi maintenant un package intelligent - mrt add mongodb-aggregation