2009-12-22 1 views
5

Wie machst du eine Abfrage wie die unten, wo ich Hotels in London oder Hotels, die Hilton in ihrem Namen haben wollen?

Diese Abfrage db.hotels.find ({$ where: "name =/hilton/i || city =/london/i"})

gibt einen solchen Fehler Fehler: { „$ err ": "$, wo Fehler kompilieren"}

Beide Abfragen separat arbeiten ok: db.hotels.find ({$ where: "city =/london/i"}) db.hotels.find ({$ where : "name =/hilton/i"})

Antwort

5

Versuchen Sie Folgendes:

db.hotels.find({ 
    $where: "/london/i.test(this.city) || /hilton/i.test(this.hotel)" 
}) 

HINWEIS Soweit ich es verstehe $where macht eine pro-Dokument-Bewertung, so dass es ziemlich langsam sein kann. Wenn Sie ein einzelnes Attribut haben würde, würde ich vorgeschlagen smth wie

db.hotels.find({name: /(hilton|london)/i}) 
+0

Aber ich bin für zwei verschiedene Felder :(sonst wäre die zweite Abfrage in Ordnung –

+0

Ah! Ich habe die Antwort aktualisiert. –

+0

Danke Alex :) du bist aaaalmost richtig –

7

Nun, das mongodb $ oder Bedingung unterstützt, können Sie dies tun:

db.hotels.find({ $or: [ { name: /hilton/i }, 
         { city: /london/i } 
         ] 
       }); 
Verwandte Themen