MongoDB findOne () usando $ e em elementos de array
Eu tenho um esquema da seguinte maneira:
Schema = mongoose.Schema
User= new Schema
{ name: String,
phones: [
{
confirmed: {
type: Boolean,
default: false
},
number: {
type: String,
unique: true
}
]}
Preciso fazer uma consulta findOne que procure um determinado nome ou número de telefone de a, mas apenas se for confirmado, tentei o seguinte, mas está tratando como um ou em vez disso
const userFound = await User.findOne({
$or: [ { name }, { $and: [{ 'phones.number': phone }, { 'phones.confirmed': true }] }
]
});
Digamos que tenho o seguinte documento:
{"name": "foo", {"number": 1234, "confirmed": false}}
userFound está retornando aquele documento quando meus parâmetros de consulta são name=foo2 , number=1234Alguma ideia do que eu posso estar fazendo errado?
Respostas
Try with $ elemMatch permite que você combine mais de um componente no mesmo elemento do array.
phones: {$elemMatch: {number:1234, confirmed: true}}
Você está perto.
Esta consulta faz o trabalho
db.collection.find({
"$or": [ { "name": "yourName" }, { "$and": [
{
"phones.confirmed": true
},
{
"phones.number": 000000
}
]
}
]
})
Exemplo aqui com vários valores qhere apenas são retornados aqueles cujo nome é fornecido ou telefone correspondente, mas apenas se for confirmado.
Usar mongooseé o mesmo, mas com o método User.findOne(...)ou User.find(...).
Olhando novamente para sua resposta, a pergunta é quase a mesma ... talvez eu tenha entendido mal a pergunta? Por favor, verifique se os resultados do jogador mongo estão ok para editar esta resposta se não estiver ok.