You can use $toDate operator in aggregation to do the desired operation,
I hope you are using mongo version 4.0+
$toDate is supported in mongo version 4.0 and on
let selectedDate = new Date();
selectedDate.setDate(d.getDate()-30); //subtracting 30 days from today's date
db.collection("your_collection_name").aggregate({$unwind:{ path: "$apps"}},
    {$addFields: { dateValue: {$toDate: "$apps.timestamp" }}}, 
    {$match: { dateValue: {$lte: selectedDate }}},
    (err, result) => {
       //perform your desired operations
    });
Explanation:
basically, I am first unwinding apps array, which will result in having a separate document of each entry in apps. 
Then operate on the timestamp field in each document, and convert it into a proper date with $toDate. 
Then in the next stage apply your filter with $match.
UPDATE  (from comments):
as you are using mongo version 3.2 the above solution will not work.
then I think, you can opt for another approach here:
- Query all your documents in this particular collection, find the proper date from the - timestampfield.
 
- Update each document with a new field which will now have the value of computed date from the above step, and save it. 
- I suggest you write a migration script for the above two steps. 
- Make sure when inserting a new document, you already add this newly computed date field. 
- Then you can have simple query like: - db.collection("your_collection_name").find({"app.newDateField": {$lte: {selectedDate }}}, 
    { "apps.$": 1}, 
    (err, result)=>{
    })