Я столкнулся с проблемой при разработке небольшого рекламного сервера с параметрами таргетинга.
Учитывая, что у нас есть коллекция кампаний со следующими параметрами в модели mon goose:
new MongoOse.Schema({
image: String,
filters: [new MongoOse.Schema({
uid: String,
type: {
type: String,
enum: ['curr_avg', 'target_avg', 'subject_id']
},
comperator: {type: String, enum: ['lte', 'gte', 'bw', 'eq']},
subject_id: ObjectId,
value_0: Number,
value_1: Number
})]
})
Теперь я хочу найти все кампании, в которых значения пользователя совпадают с фильтрами кампании. пользовательская схема определяется следующим образом:
new MongoOse.Schema({
username: String,
subject: ObjectId,
curr_avg: Number,
target_avg: Number
})
Есть идеи о том, как выполнить запрос collection.find()
, чтобы получить соответствующие кампании для пользователя?
Мой первый черновик следующее:
{$or: [
{
filters: // todo: find matching documents
},
{
filters: {
$size: 0 // or no filters specified
}
}, {
filters: null
}, {
filters: {
$exists: false // or filters not exisiting
}
}
]}