Логическое ИЛИ для двух разных полей в $, где запросы в mongodb - PullRequest
5 голосов
/ 22 декабря 2009

Как вы делаете запрос, подобный приведенному ниже, где я хочу отели в Лондоне ИЛИ отели, в которых есть имя hilton?

Этот запрос db.hotels.find ({$ где: "name = / hilton / i || city = / london / i"})

выдает такую ​​ошибку ошибка: {"$ err": "$ где ошибка компиляции"}

Оба запроса по отдельности работают нормально: db.hotels.find ({$ где: "city = / london / i"}) db.hotels.find ({$ где: "name = / hilton / i"})

Ответы [ 2 ]

7 голосов
/ 18 декабря 2010

Теперь, когда mongodb поддерживает $ или условие, вы можете сделать это следующим образом:

db.hotels.find( { $or: [ { name: /hilton/i }, 
                         { city: /london/i } 
                       ] 
              } );
5 голосов
/ 22 декабря 2009

Попробуйте это:

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

Примечание Насколько я понимаю, $where выполняет оценку для каждого документа, поэтому она может быть довольно медленной. Если бы у вас был один атрибут, я бы предложил что-то вроде

db.hotels.find({name: /(hilton|london)/i})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...