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.
});
Ich habe Probleme mit einer scheinbar einfachen Abfrage in Mongo.
Die obige Abfrage i alle der ersten Partie müssen in der Abfrage dh werden als Set:
{"date_entered": { $lt: fromTime }},
{"cancelled": { $ne: true }},
{"hideFromUserIds.id": { $ne: current_user_id }},
{"banned": false},
Dies funktioniert gut, wie erwartet. Ich muss diese Abfrage jedoch hinzufügen, da sich das Doc-Schema geändert hat.
Es gibt ein neues Feld "privacy" wo int 1 ist privat und sollte nur an den Benutzer an alle zurückgegeben werden. Wie Sie aus meiner Anfrage sehen i
{$and: [
{"user_id": { $ne: current_user_id }},
{"privacy": { $ne: 1 }}
]}
also ist versucht zu sagen, wenn die current_user_id derjenige ist die Abfrage anfordert, führen Sie einen Privacy-Filter nicht anwenden, da sonst nur Dokumente mit der Privatsphäre Rückkehr nicht 1 ist.
das Problem ist, dass es bewirbt $ ne: 1 für alle Benutzer einschließlich der current_user_id ...
EDIT die einzige Art, wie ich das gewünschte Ergebnis erzielen kann, ist ein riesiges $ zu tun oder aber das fühlt sich ineffizient :
wo oder ist eine Reihe anderer user_id des
$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 }
]}
]})