Sử dụng $indexOfArray trong aggregation để tìm vị trí của từng giá trị từ mảng tham chiếu trong mảng đích.
Tạo collection:
> db.demo381.insertOne({"Values":[10,40,60,30,60]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5b59f72ae06a1609a00b15") }
> db.demo381.insertOne({"Values":[100,500,700,500,800]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5b59f72ae06a1609a00b16") }
> db.demo381.insertOne({"Values":[20,40,30,10,60]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5b59f72ae06a1609a00b17") }
Xem dữ liệu:
> db.demo381.find();
Aggregation tìm index của [10, 40] trong từng mảng Values:
> db.demo381.aggregate([ {"$project":{ "Result":{ "$map":{ "input":[10,40], "in":{"$indexOfArray":["$Values","$$this"]} } } }} ])Kết quả:
Giải thích:
$map: lặp qua mảng tham chiếu [10, 40]$indexOfArray: tìm vị trí đầu tiên của$$thistrong$Values- Trả về -1 nếu không tìm thấy
- Chỉ trả về index **đầu tiên** (không phải tất cả vị trí)
Doc 1: 10 ở index 0, 40 ở index 1 → [0,1] Doc 2: không có 10, 40 → [-1,-1] Doc 3: 10 ở index 3, 40 ở index 1 → [3,1]