【发布时间】:2020-03-28 15:09:48
【问题描述】:
这是我保存在数据库中的数据
0 _id:5e4d18bd10e5482eb623c6e4
name:'John singh',
cars_owned:[
{car_id:'1'},
{car_id:'5'},
{car_id:'7'},
{car_id:'8'}
],
1 _id:5e4d18bd10e5482eb6g57f5rt
name:'Josh kumar',
cars_owned:[
{car_id:'7'},
{car_id:'9'},
{car_id:'1'},
{car_id:'3'}
],
2 _id:5e4d18bd10e5482eb6r67222
name:'Jesse nigam',
cars_owned:[
{car_id:'6'},
{car_id:'7'},
{car_id:'9'},
{car_id:'3'}
],
3 _id:5e4d18bd10e5482eb6467ii46
name:'Jordan khan',
cars_owned:[
{car_id:'3'},
{car_id:'1'},
{car_id:'4'},
{car_id:'5'}
]
现在我想搜索一个用户,其起始名称为“J”,并且我的 cars_owned 输入将是
'J',cars_owned['3','7','9','12','10']
输出将是
1 _id:5e4d18bd10e5482eb6g57f5rt
name:'Josh kumar',
cars_owned:[
{car_id:'7'},
{car_id:'9'},
{car_id:'1'},
{car_id:'3'}
],
2 _id:5e4d18bd10e5482eb6r67222
name:'Jesse nigam',
cars_owned:[
{car_id:'6'},
{car_id:'7'},
{car_id:'9'},
{car_id:'3'}
],
0 _id:5e4d18bd10e5482eb623c6e4
name:'John singh',
cars_owned:[
{car_id:'1'},
{car_id:'5'},
{car_id:'7'},
{car_id:'8'}
],
3 _id:5e4d18bd10e5482eb6467ii46
name:'Jordan khan',
cars_owned:[
{car_id:'3'},
{car_id:'1'},
{car_id:'4'},
{car_id:'5'}
]
现在您会注意到结果是所有名称以“J”开头的用户,cars_owned 是在 3,7,9,12,10 但降序排列的用户是大多数cars_owned 都在顶部和其他方面相匹配。我希望根据单个 mongo db 查询中匹配的最大 cars_owned 对结果进行排序。到目前为止,我已经做了一个简单的查找查询。
User_data.find({name: { $regex: "^" + search_name },
cars_owned:{$elemMatch:{car_id:'3',car_id:'7',car_id:'9',car_id:'12',car_id:'10'}
}},function(err,resp){
console.log(JSON.stringify(resp,null,4));
});
但它只返回一个文档我想要所有具有任何给定 car_id 但按最大匹配排序的文档。如果您对这个问题有任何不理解,请随时在评论中提问,但请在单个 mongo db 查询中给出答案,我也可以使用 aggeregation 框架。提前致谢。
【问题讨论】:
标签: node.js mongodb mongoose aggregation-framework