Mongodb: como usar uma consulta “not in”
Você pode usar a seguinte sintaxe para localizar todos os documentos onde o valor de um determinado campo não está em uma determinada lista de valores:
db.collection.find({field1: { $nin : [" value1 ", " value2 ", " value3 "]}})
Esta consulta específica procura todos os documentos nos quais o valor do campo 1 não é igual a valor1, valor2 ou valor3.
Os exemplos a seguir mostram como usar essa sintaxe na prática.
Exemplo 1: Consulta “NOT IN” com um valor
Vamos supor que temos uma equipe de cobrança com os seguintes documentos:
db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 }) db.teams.insertOne({team: " Spurs ", position: " Guard ", points: 22 }) db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 }) db.teams.insertOne({team: " Warriors ", position: " Forward ", points: 26 }) db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })
Podemos usar o seguinte código para encontrar todos os documentos onde o campo “team” não é igual ao valor “Rockets”:
db.teams.find({team: { $nin : [" Rockets "]}})
Esta consulta retorna os seguintes documentos:
{ _id: ObjectId("619527e467d6742f66749b72"), team: 'Cavs', position: 'Guard', points: 33 } { _id: ObjectId("619527e467d6742f66749b6e"), team: 'Mavs', position: 'Guard', points: 31 } { _id: ObjectId("619527e467d6742f66749b6f"), team: 'Mavs', position: 'Guard', points: 22 }
Observe que os únicos documentos retornados são aqueles onde o campo “team” não é igual a “Rockets”.
Exemplo 2: Consulta “NON IN” com uma lista de valores
Vamos supor que temos uma equipe de cobrança com os seguintes documentos:
db.teams.insertOne({team: " Mavs ", position: " Guard ", points: 31 }) db.teams.insertOne({team: " Spurs ", position: " Guard ", points: 22 }) db.teams.insertOne({team: " Rockets ", position: " Center ", points: 19 }) db.teams.insertOne({team: " Warriors ", position: " Forward ", points: 26 }) db.teams.insertOne({team: " Cavs ", position: " Guard ", points: 33 })
Podemos usar o seguinte código para encontrar todos os documentos onde o campo “team” não é igual ao valor “Rockets” ou “Cavs”:
db.teams.find({team: { $nin : [" Rockets ", " Cavs "]}})
Esta consulta retorna os seguintes documentos:
{ _id: ObjectId("619527e467d6742f66749b6e"), team: 'Mavs', position: 'Guard', points: 31 } { _id: ObjectId("619527e467d6742f66749b6f"), team: 'Mavs', position: 'Guard', points: 22 }
Observe que os únicos documentos retornados são aqueles onde o campo “team” não é igual a “Rockets” ou “Cavs”.
Nota : Você pode encontrar a documentação completa da função $nin aqui .
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras operações comuns no MongoDB:
MongoDB: Como consultar com uma expressão regular “Like”
MongoDB: Como verificar se o campo contém uma string
MongoDB: Como adicionar um novo campo a uma coleção
MongoDB: Como remover um campo de cada documento