我在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无关。
那么有一个问题来解决我的问题吗?
答案 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);
}
});