A partire da MongoDB versione 3.4 possiamo e l'operatore $indexOfArray
restituisce l'indice in cui è possibile trovare un determinato elemento nell'array.
$indexOfArray
accetta tre argomenti. Il primo è il nome del campo dell'array con prefisso $
.
Il secondo è l'elemento e il terzo facoltativo è l'indice per avviare la ricerca in. $indexOfArray
restituisce il primo indice in cui viene trovato l'elemento se l'indice per avviare la ricerca non è specificato.
Demo:
> db.collection.insertOne({ "_id" : 123, "food": [ "apple", "mango", "banana", "mango" ] })
{ "acknowledged" : true, "insertedId" : 123 }
> db.collection.aggregate([ { "$project": { "matchedIndex": { "$indexOfArray": [ "$food", "mango" ] } } } ])
{ "_id" : 123, "matchedIndex" : 1 }
> db.collection.aggregate([ { "$project": { "matchedIndex": { "$indexOfArray": [ "$food", "mango", 2 ] } } } ])
{ "_id" : 123, "matchedIndex" : 3 }
> db.collection.aggregate([ { "$project": { "matchedIndex": { "$indexOfArray": [ "$food", "apricot" ] } } } ] )
{ "_id" : 123, "matchedIndex" : -1 }
Questa risposta è la migliore per la versione 3.4+, ma se si utilizza la versione precedente, dovrebbe seguire la risposta di @BlakesSeven –