modelThreader.find({
$and: [
{"date_entered": { $lt: fromTime }},
{"cancelled": { $ne: true }},
{"hideFromUserIds.id": { $ne: current_user_id }},
{"banned": false},
{$and: [
{"user_id": { $ne: current_user_id }},
{"privacy": { $ne: 1 }}
]}
]
}).exec(function(err, docs){
// handle response.
});
mongoで一見単純なクエリで問題が発生しています。
上記のクエリ私は、クエリIEのセットのように第1のロットのすべてを必要とする:
{"date_entered": { $lt: fromTime }},
{"cancelled": { $ne: true }},
{"hideFromUserIds.id": { $ne: current_user_id }},
{"banned": false},
予想通りこれは、正常に動作します。しかし、docスキーマが変更されたので、このクエリに追加する必要があります。
新しいフィールド「プライバシー」があります。この場合、int1はプライベートであり、全員にのみユーザーに返す必要があります。あなたは私のクエリから見ることができるようにcurrent_user_idがクエリを要求するものであり、任意のプライバシーフィルタを適用していない、そうでない場合は、唯一のプライバシーとドキュメントを返すことは1でない場合、私は、
{$and: [
{"user_id": { $ne: current_user_id }},
{"privacy": { $ne: 1 }}
]}
すなわち言うしようとしています。 current_user_idを含むすべてのユーザーに対して1 ...
EDIT 唯一の方法私は、所望の結果は巨大な$を行うことですか達成することができますが、これは非効率的な感じ:
問題は、$ NEが適用されていることです:
modelThreader.find({
"date_entered": { "$lt": fromTime },
"cancelled": { "$ne": true },
"banned": false,
"$or": [
{ "user_id": current_user_id },
{
"user_id": { "$ne": current_user_id },
"hideFromUserIds.id": { "$ne": current_user_id },
"privacy": { "$ne": 1 }
]
})
:他のuser_idの
$or: [
{$and: [
//other people, respecting privacy
{$or: or},
{"date_entered": { $lt: fromTime }},
{"cancelled": { $ne: true }},
{"hideFromUserIds.id": { $ne: current_user_id }},
{"banned": false},
{"user_id": { $ne: current_user_id }},
{"privacy": { $ne: 1 }}
]},
{$and: [
//this user, not looking at privacy
{"date_entered": { $lt: fromTime }},
{"cancelled": { $ne: true }},
{"hideFromUserIds.id": { $ne: current_user_id }},
{"banned": false},
{"user_id": current_user_id }
]}
]})