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.
To use variables, work with var in MongoDB. Let us create a collection with documents − Display all documents from a collection with the help of find () method −
Simply enclosing [query] in brackets tells mongodb that it's not literal, but rather a path. Show activity on this post. use like this if the object is nested.
Field names, like variable names, must begin with a letter, can contain letters, digits, or underscore characters, and are case sensitive. To avoid potential conflicts, do not use the names of existing variables or functions as field names. Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Field names, like variable names, must begin with a letter, can contain letters, digits, or underscore characters, and are case sensitive. To avoid potential conflicts, do not use the names of existing variables or functions as field names.
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?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With