使用特定参数在Mongoose中查找

时间:2016-04-20 16:56:09

标签: node.js mongodb mongoose

我在Mongodb中有一个数据库,其中包含具有不同技能的配置文件。

以下是一个个人资料的示例。

{_id: 570b8b5afdcaf27c24a0a837,
  identifier: 'Mr X',
  url: 'https://MRX.com',
  email: 'Mrx@gmail.com'
skills: 
   [ { _id: 570b8b5afdcaf27c24a0a858, title: 'Java', number: '74' },
     { _id: 570b8b5afdcaf27c24a0a857, title: 'Linux', number: '48' },
     { _id: 570b8b5afdcaf27c24a0a856, title: 'C++', number: '43' },
     { _id: 570b8b5afdcaf27c24a0a855, title: 'SQL', number: '34' },
     { _id: 570b8b5afdcaf27c24a0a854, title: 'XML', number: '28' },
     { _id: 570b8b5afdcaf27c24a0a853, title: 'MySQL', number: '23' },
     { _id: 570b8b5afdcaf27c24a0a852, title: 'C', number: '22' },
     { _id: 570b8b5afdcaf27c24a0a851,
       title: 'Java Enterprise Edition',
       number: '18' }]
}

我的问题:在mongoose中是否有一个查询,我可以找到一个在他的技能上有linux的配置文件,但是那个linux技能的数量是否大于40?

我在搜索选项中尝试了类似的东西:

var x = {
    'skills.title': 'Linux',
    'skills.number': {
        $gt: 40
    },
}

但它不起作用,程序找到了Linux技能,但是40号与Linux无关。

那么有一个问题来解决我的问题吗?

2 个答案:

答案 0 :(得分:2)

使用$elemMatch

db.yourCollection.find(
   { skills: { $elemMatch: { title: "Linux", number: { $gte: 40 } } } }
)

取自docs

  

$ elemMatch运算符匹配包含数组字段的文档   至少有一个元素匹配所有指定的查询   标准。

答案 1 :(得分:-2)

在猫鼬中你应该做这样的事情:

var myCol = require('.myModel');
myCol.aggregate(
    [
        {$match: 
            { 
                title: "Linux", 
                number: { $gte: 40 } 
            }
        }
    ], function (err, result) {
        if (err) {
            console.log(err);
        } else {
            console.log(result);
        }
    });