Как отфильтровать поддокумент в мангусте вместе с населением - PullRequest
0 голосов
/ 03 сентября 2018

Мой документ Users содержит следующие данные:

{  "name" : "Plantation",
    "image" : "1535695444692.jpg",
    "type" : "csr",
    "user_id" : ObjectId("5b7d598e86acd5b4171a2587"),
    "joining" : [ 
        {
            "csr" : ObjectId("5b8a923f3284ca8451980a43"),
            "volunteer" : ObjectId("5b891c4805540dfc0d541f72"),
            "joined" : false
        }, 
        {
            "csr" : ObjectId("5b8a923f3284ca8451980a43"),
            "volunteer" : ObjectId("5b891c4805540dfc0d541f73"),
            "joined" : true
        }
    ]
}

Я хочу применить фильтр только к вложенному документу joining, где csr id равен "5b8a923f3284ca8451980a43" , если эти условия были выполнены, тогда вложенный документ joining должен содержать все соответствующие данные, в противном случае joining Поддокумент может быть пустым. Я также хочу заполнить данные joining.volunteer.

Я использовал следующий код, но он вернул только первый соответствующий поддокумент.

Users.findOne({ _id: req.params.id },{'joining':{$elemMatch:{csr:'5b7d598e86acd5b4171a2587'}}}).populate('joining.volunteer').then(function (opportunity) {
        return res.json({ opportunity: opportunity });
    }).catch(next);

1 Ответ

0 голосов
/ 03 сентября 2018

попробуйте это:

Users.find({_id: req.params.id},{'joining':{$elemMatch:{csr: CSR_ID }}}).populate({path: 'joining',populate:{
                path: 'volunteer',
                model: 'YOUR volunteer MODEL NAME'
}})
...