Несколько условий для поля в mongoDB с $ или - PullRequest
0 голосов
/ 27 июня 2018

Я хочу получить все документы из коллекции MongoDB, где поле users является либо числовым, либо строкой, состоящей из всех цифр (1, 2, 19 или «4», «19», .. .)

Я запрашиваю:

db.getCollection('collection').find(
    { 
        users: { $or : [ { $type: [1, 16, 18, 19] },
                         { $regex: /^[0-9]+$/ } ]
               }
    }
)

... и получаю ошибку «Неизвестный оператор $ или».

Это работает:

db.getCollection('collection').find(
    { 
        $or: [ 
                {users:  { $type: [1, 16, 18, 19] } },
                {users:  { $regex: /^[0-9]+$/ }}
        ]
    }
)

Почему не работает первый вариант?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

$ или сам должен содержать поле, по которому вы хотите запросить. Ваш второй запрос содержит поле.

$or :[{field_name:Match_expression},{field_name:Match_expression}...{field_name:Match_expression}]
0 голосов
/ 27 июня 2018
db.getCollection('collection').find( {
    $and : [
        { $or : [ { $type: [1, 16, 18, 19] } ] },
        { $or : [ {users:  { $regex: /^[0-9]+$/ } ] }
    ]
} )

это должно работать

EDIT

Здесь ответили раньше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...