2016-08-05 17 views
0

Ich habe ein Schema, das wie folgt aussieht:Mongoose when-Abfrage innerhalb oder-Abfrage

var UserSchema = new Schema({ 
    name: {type : String, required: true}, 
    location_a: {type: [Number], default: [0,0], index: '2dsphere'}, 
    location_b: {type: [Number], default: [0,0], index: '2dsphere'} 
}); 

Die Eingabe meiner Suche hat einen Standort und Entfernung. Jetzt möchte ich die Benutzer, die entweder location_a OR location_b in der Nähe des gesuchten Standortes haben.

Ich habe eine Abfrage versucht, die wie folgt aussieht:

query = query.and([ 
     { $or: [ 
      query.where('location_a').near({ 
       center: {type: 'Point', coordinates: [long, lat]}, 
       maxDistance: distance * 1000, spherical: true 
      }), 
      query.where('location_b').near({ 
       center: {type: 'Point', coordinates: [long, lat]}, 
       maxDistance: 100 * 1000, spherical: true 
      }) 
     ]} 
    ]); 

Aber es macht meine App Absturz mit: „Auslöser Range: Maximale Call-Stack-Größe überschritten“

+0

Ihr 'und' macht nichts, und Ihre' [] 'Klammern um Ihr' $ oder' sind an den falschen Stellen –

+0

Sind Sie sicher, dass das [] das Problem ist? Wo sollte ich sie stattdessen platzieren? – Vetm

+0

Bitte zeigen Sie mir, wie Sie Abfrage zuweisen, bevor Sie die obige Abfrage durchführen –

Antwort

0

verwendete ich das falsche Format in meinem Abfrage. So würdest du es machen.

query = query.and([ 
     { $or: [ 
      { 
       "at_student_location": { 
        "$near": [12.5386, 41.884], 
        "$maxDistance": 1000 
       } 
      } 
      , 
      { 
       "at_home_location": { 
        "$near": [12.5386, 41.884], 
        "$maxDistance": 1000 
       } 
      } 
     ]} 
    ]); 

Das Problem ist, dass ein Mongo akzeptiert nur einen geoNear Ausdruck pro Abfrage, so dass es unmöglich ist, dies zu tun.