У меня есть документы с полями a и b (и некоторыми другими дополнительными полями). У меня есть список пар значений для полей a, b,, и я хотел бы сопоставить все документы MongoDB, в которых поля a и b не совпадают как любая пара этих полей в данном списке. Итак, если мои документы в базе данных MongoDB:

{a: 1, b: 2, c: 3}
{a: 4, b: 5, c: 6}
{a: 7, b: 8, c: 9}
{a: 1, b: 8, c: 10}

И мой список [{a: 1, b: 2}, {a: 7, b: 8}], я хотел бы сделать запрос, который вернул бы только второй и последний документы.

Как я могу это сделать?

1
Mitar 24 Дек 2015 в 12:44

2 ответа

Лучший ответ

Далее будут отфильтрованы документы, которые имеют любое из определенных значений.

db.<your_colllection>.find({
    $and : [
        {$and: [{a :{$ne: 1}},{b: {$ne: 2}}]},
        {$and: [{a :{$ne: 7}},{b: {$ne: 8}}]}
    ]
})

Далее будут отфильтрованы документы с определенными парными значениями.

db.delme.find({
    $nor : [
        {$nor: [{a :{$ne: 1}},{b: {$ne: 2}}]},
        {$nor: [{a :{$ne: 7}},{b: {$ne: 8}}]}
    ]
})
1
Jay 24 Дек 2015 в 11:32