8

How would I go about using a variable as a field name in a Mongo query in a Meteor application.

Here is an example...

This runs a find on my request controllers collection after capitalizing the collection name for the parent id of a child. The child is the users field.

window[Meteor.request.controller.capitalise()]["find"]({ _id: Session.get('parent_id'), users: params.child }).count()

As you can see my controller is a variable name for the collection item which allows me to have a single line of code for finding children of controller/collections but I need to be able to set the child field name to a variable. In the above example that would be users but I want it to be a variable name.

I have tried this but it does not work.

window[Meteor.request.controller.capitalise()]["find"]({ _id: Session.get('parent_id'), [Session.get('child_collection_name').decapitalise()]: params.child }).count()

where

Session.get('child_collection_name').decapitalise()

returns users

Any ideas? If I can figure out how to use a variable name in a mongo query in meteor it would reduce my code footprint significantly.

Steeve Cannon
  • 3,682
  • 3
  • 36
  • 49

1 Answers1

14

The query is just a JavaScript object, so you can build it step by step:

var query = { _id: Session.get('parent_id') };
var myCustomField = Session.get('child_collection_name').decapitalise();
var myCustomValue = params.child;
query[myCustomField] = myCustomValue;
var count = SomeCollection.find(query).count();

Does that do the trick?

Geoff
  • 4,372
  • 5
  • 25
  • 29
  • Yeah works great! I have even been able to figure out how to use it for $pull. Can't get it to work for $addToSet yet though. This has reduced my code footprint size by about 80%! – Steeve Cannon Aug 19 '12 at 14:20