Try this
By referring your sample schema, it is array of documents of user_id's
Use $unwind to seperate the docs from array and filter the documents by using given user_id and whose value is negative.
Sample document
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : [
                {
                        "user_id" : "1",
                        "name" : "aaaa",
                        "value" : -10
                },
                {
                        "user_id" : "2",
                        "name" : "bbbb",
                        "value" : 30
                },
                {
                        "user_id" : "1",
                        "name" : "aaaa",
                        "value" : 310
                },
                {
                        "user_id" : "2",
                        "name" : "bbbb",
                        "value" : -15
                },
                {
                        "user_id" : "1",
                        "name" : "aaaa",
                        "value" : -100
                },
                {
                        "user_id" : "3",
                        "name" : "cccc",
                        "value" : 390
                }
        ]
}
db.collection.aggregate([{$unwind:"userArray"}]);
The result of unwind on above data would be 
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : {
                "user_id" : "1",
                "name" : "aaaa",
                "value" : -10
        }
}
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : {
                "user_id" : "2",
                "name" : "bbbb",
                "value" : 30
        }
}
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : {
                "user_id" : "1",
                "name" : "aaaa",
                "value" : 310
        }
}
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : {
                "user_id" : "2",
                "name" : "bbbb",
                "value" : -15
        }
}
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : {
                "user_id" : "1",
                "name" : "aaaa",
                "value" : -100
        }
}
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : {
                "user_id" : "3",
                "name" : "cccc",
                "value" : 390
        }
}
Then apply the condition of that is user_id and value is negative. For this we can use $match together with $and (since we have two conditions value and id)
db.collection.aggregate([{$unwind:"$userArray"}, {$match:{$and: [{"userArray.value":{$lte:0}}, {"userArray.user_id":"1"}]}} ]);
for user_id: 1 the query result is 
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : {
                "user_id" : "1",
                "name" : "aaaa",
                "value" : -10
        }
}
{
        "_id" : ObjectId("582032556772b7cb0ff85721"),
        "userArray" : {
                "user_id" : "1",
                "name" : "aaaa",
                "value" : -100
        }
}
With this result you have to iterate it in your service layer and work on the other desired results.
Hope it helps!