Bắt đầu từ phiên bản MongoDB 3.4 chúng tôi có thể e toán tử $indexOfArray
để trả về chỉ mục mà tại đó một phần tử đã cho có thể được tìm thấy trong mảng.
$indexOfArray
có ba đối số. Đầu tiên là tên của trường mảng có ký hiệu là $
.
Thứ hai là phần tử và tùy chọn thứ ba là chỉ mục để bắt đầu tìm kiếm tại. $indexOfArray
trả về chỉ mục đầu tiên mà tại đó phần tử được tìm thấy nếu chỉ mục để bắt đầu tìm kiếm tại không được chỉ định.
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 }
Câu trả lời này là tốt nhất cho phiên bản 3.4+, nhưng nếu sử dụng phiên bản cũ, hãy làm theo câu trả lời của @BlakesSeven –