Ab MongoDB Version 3.4 können wir uns Der Operator gibt den Index zurück, an dem ein bestimmtes Element im Array gefunden werden kann.
$indexOfArray
braucht drei Argumente. Der erste ist der Name des Felds Array mit dem Präfix $
Vorzeichen.
Die zweite ist das Element und die dritte optional ist der Index, um die Suche zu starten. $indexOfArray
gibt den ersten Index zurück, bei dem das Element gefunden wird, wenn der Index zum Starten der Suche nicht angegeben ist.
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 }
Diese Antwort ist am besten für Version 3.4+, aber wenn Sie alte Version verwenden, sollte die Antwort von @BlakesSeven folgen –