我有一个文档集合(事件),比如,
[{
_id: 1,
followerRange: [
{min: 5000, max: 50000, type: 'instagram'},
{min: 1000, max: 5000, type: 'facebook'},
{min: 1000, max: 25000, type: 'youtube'},
]
},{
_id: 2,
followerRange: [
{min: 10000, max: 50000, type: 'instagram'},
{min: 5000, max: 10000, type: 'facebook'},
{min: 10000, max: 100000, type: 'youtube'},
]
},{
_id: 3,
followerRange: [
{min: 10000, max: 500000, type: 'instagram'},
{min: 10000, max: 100000, type: 'facebook'},
{min: 50000, max: 100000, type: 'youtube'},
{min: 50000, max: 100000, type: 'twitter'},
]
}]
这表明,在特定社交 channel 上参加事件所需的最低关注者/订阅者人数是多少。
现在,一个用户有三个 channel ,比如,
[{
type: 'instagram',
followers: 7000
},{
type: 'facebook',
followers: 3000
},{
type: 'youtube',
followers: 12000
}]
现在,要向该用户显示的事件集合的所需输出将是 -
[{
_id: 1,
followerRange: [
{min: 5000, max: 50000, type: 'instagram'},
{min: 1000, max: 5000, type: 'facebook'},
{min: 1000, max: 25000, type: 'youtube'},
]
}]
解释:
- 因为用户拥有事件 1 所需的所有 channel 。
- 此外,各个 channel 的用户关注者数量也满足最小、最大范围的标准。
- 基本上,事件集合的输出将基于不同的用户及其 channel (和关注者)。
请帮我弄清楚如何根据活跃用户( channel )过滤事件。谢谢:)
最佳答案
我建议您像这样更改事件集合的结构:
{
_id: 1,
followerRange: {
instagram: {min: 5000, max: 50000},
facebook: {min: 1000, max: 5000},
youtube: {min: 1000, max: 25000}
}
}
那就简单了:
var instagramFollowers = 100;
db.events.find({"followerRange.instagram.min":{$lt: instagramFollowers}}, "followerRange.instagram.max":{$gt: instagramFollowers}}, ... etc.)
关于node.js - MongoDB:查询以将数组中的每个元素与条件匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66007423/