2016-09-08 4 views
2

Я пытаюсь добиться следующего

SELECT * 
FROM users 
WHERE (_currentMatch = null AND 
     unregistrated = false AND 
     gender = 'male' AND 
     lastMatchTime < dateMale) 
OR  (_currentMatch = null AND 
     unregistrated = false AND 
     gender = 'female' AND 
     lastMatchTime < dateFemale); 

с мангуста:

User.find(
    { 
     $or:[{ 
       lastMatchTime: {$lt: dateMale}, 
       _currentMatch: null, 
       unregistrated: false, 
       gender: 'male' 
      }, 
      { 
       lastMatchTime: {$lt: dateFemale}, 
       _currentMatch: null, 
       unregistrated: false, 
       gender: 'female' 
      } 
     ] 
    } 
) 

Этот запрос не кажется, чтобы соответствовать всем заданным условиям. Я пропустил $and?

ответ

3

Видя, что первые два условия (_currentMatch = null AND unregistrated = false) продублированы в обоих ИЛИ статьи, ваш SQL запрос может быть переписано как:

SELECT * 
FROM users 
WHERE 
    _currentMatch = null 
    AND unregistrated = false 
    AND gender in ('female', 'male') 

Эквивалентный запрос Монго следующим образом:

User.find({ 
    "_currentMatch": null, 
    "unregistrated": false, 
    "gender": { "$in": ["female", "male"] } 
}) 

- ОБНОВЛЕНИЕ -

SELECT * 
FROM users 
WHERE (_currentMatch = null AND 
     unregistrated = false AND 
     gender = 'male' AND 
     lastMatchTime < dateMale) 
OR  (_currentMatch = null AND 
     unregistrated = false AND 
     gender = 'female' AND 
     lastMatchTime < dateFemale); 

может быть повторно записана в виде

User.find({ 
    "_currentMatch": null, 
    "unregistrated": false, 
    "$or": [ 
     { "gender": "female", "lastMatchTime": { "$lt": dateFemale } }, 
     { "gender": "male", "lastMatchTime": { "$lt": dateMale } } 
    ] 
}) 
+0

Запросы упрощаются. Существуют разные условия. Я уточню свой вопрос. ** Обновлено ** – Chris

+0

Так мой первоначальный запрос неправильный или он должен работать? Ваш запрос явно короче. – Chris

+1

Не могли бы вы изменить свой вопрос, чтобы включить кучу образцов документов, с которыми мы можем протестировать запросы? – chridam

Смежные вопросы