MongoDB findOne () utilizzando $ e sugli elementi dell'array
Ho uno schema come segue:
Schema = mongoose.Schema
User= new Schema
{ name: String,
phones: [
{
confirmed: {
type: Boolean,
default: false
},
number: {
type: String,
unique: true
}
]}
Devo fare una query findOne che cerchi un certo nome o un numero di telefono di un ma solo se è confermato ho provato quanto segue ma lo tratta come un o invece
const userFound = await User.findOne({
$or: [ { name }, { $and: [{ 'phones.number': phone }, { 'phones.confirmed': true }] }
]
});
Diciamo che ho il seguente documento:
{"name": "foo", {"number": 1234, "confirmed": false}}
userFound restituisce quel documento quando i miei parametri di query sono name=foo2 , number=1234Qualche idea su cosa potrei fare di sbagliato?
Risposte
Prova con $ elemMatch ti consente di abbinare più di un componente all'interno dello stesso elemento dell'array.
phones: {$elemMatch: {number:1234, confirmed: true}}
Sei vicino.
Questa query fa il lavoro
db.collection.find({
"$or": [ { "name": "yourName" }, { "$and": [
{
"phones.confirmed": true
},
{
"phones.number": 000000
}
]
}
]
})
Esempio qui con più valori qqui vengono restituiti solo quelli il cui nome è dato o il telefono corrisponde ma solo se è confermato.
L'uso mongooseè lo stesso ma con metodo User.findOne(...)o User.find(...).
Guardando di nuovo la tua risposta, la domanda è quasi la stessa ... forse ho frainteso la domanda? Per favore, controlla se i risultati del giocatore mongo sono ok per modificare questa risposta se non va bene.