私の基本的な構造は、subjectIdとhourly priceを含むセッションオブジェクトを持つUserオブジェクトです。
User{
defaultHourly: Number,
subjects{
[
id: String,
hourly: Number
]
}
}
私はこのようなelemMatchを使用します。
query.elemMatch("subjects", {
"id": { $in: subjects },
"$or": [
{ "hourly": { $eq: null } }, // this is my issue
{
"$and": [
{ "hourly": { $ne: null } },
{ "hourly": { $gte: price.low, $lte: price.high } }
]
}
]
});
elemMatchの最初の部分は、私が欲しいsubjectIdは、被験者の配列であることを確認します。それから私は価格でフィルタリングしたい。 Userがhourlyフィールドにnullを持つ場合、defaultHourlyとprice.lowおよびprice.highを比較したいと思います。
defaultHourlyはサブジェクトのフィールドではありませんが、サブジェクトの親のフィールドであるため、アクセス方法がわかりません。
私が書きたい:
"$or": [
{
"$and": [
{ "hourly": { $eq: null } },
{ "defaultHourly": { $gte: price.low, $lte: price.high } } //this doesnt work because default hourly is not a field.
]
},
{
"$and": [
{ "hourly": { $ne: null } },
{ "hourly": { $gte: price.low, $lte: price.high } }
]
}
]
});
がどのように私は、このマルチレベルの比較を行うことができますか?