使用查找的Mongoose查询,结果是我找到结果的字段名称

时间:2017-04-18 21:29:44

标签: javascript mongodb mongoose mongodb-query

我试图通过我的查询得到正则表达式的字段,例如:

如果我在facebook字段中找到结果;

让我说我的req.body.key ='疯狂'并且在我的db中我在facebook领域'疯狂'。我希望作为查询结果我的CitizenProfile模型更多的字段或字段我找到了结果。在这种情况下,字段名称为“facebook”

Obs:这个查询已经给出了模型我只需要找到与正则表达式匹配的字段或字段名称。 这可以实现吗?谢谢!

    app.post('/v1/profile/search', (req, res) => {
    async.waterfall([
        function (next) {
            CitizenProfile.find({
                $or: [{'first_name': {$regex: req.body.key, $options:'i'}}, {'middle_name': {$regex: req.body.key, $options:'i'}},
                    {'last_name': {$regex: req.body.key, $options:'i'}}, {'email': {$regex: req.body.key, $options:'i'}},
                    {'facebook': {$regex: req.body.key, $options:'i'}}, {'linkedin': {$regex: req.body.key, $options:'i'}},
                    {'skills': {$regex: req.body.key, $options:'i'}}],
                'id_citizen': {$ne: req.body.id_citizen},
                'is_hidden': {$ne: true}
            })
                .exec(function (err, data) {
                   ...

1 个答案:

答案 0 :(得分:1)

我不认为MongoDB有这样的功能(如果我错了,请纠正我)。

由于您只返回与正则表达式匹配的文档,因此您必须再次对这些文档应用正则表达式以查找字段。

未经测试,但我认为你会做类似

的事情
let regex = new RegExp(req.body.key, 'i');

CitizenProfile.find({
    $or: [
        { 'first_name': regex }, 
        { 'middle_name': regex },
        { 'last_name': regex }, 
        { 'email': regex },
        { 'facebook': regex }, 
        { 'linkedin': regex },
        { 'skills': regex }
    ],
    'id_citizen': { $ne: req.body.id_citizen },
    'is_hidden': { $ne: true }
}).exec(function (err, profiles) => {   
    // loop through found documents
    profiles.forEach(function (profile) {
        profile = profile.toJSON();
        // filter fields based on regular expression
        let keys = Object.keys(profile).filter(k => regex.test(profile[k]));
        // do something with keys
        console.log(keys);
    });
});