Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

ค้นหาค่าในอาร์เรย์ที่มีอยู่ในอีกอาร์เรย์ และส่งกลับ Index เป็นอาร์เรย์ใหม่ใน MongoDB

ใช้ $map ร่วม $indexOfArray เพื่อวนลูปค่าที่ต้องการค้นหา และหาตำแหน่ง (index) ในอาร์เรย์เป้าหมาย

ตัวอย่างข้อมูลทดสอบ

> db.demo381.insertOne({"Values":[10,40,60,30,60]});
> db.demo381.insertOne({"Values":[100,500,700,500,800]});
> db.demo381.insertOne({"Values":[20,40,30,10,60]});

แสดงข้อมูล

> db.demo381.find();
{
    "_id" : ObjectId("5e5b59f72ae06a1609a00b15"), "Values" : [10, 40, 60, 30, 60]
}
{
    "_id" : ObjectId("5e5b59f72ae06a1609a00b16"), "Values" : [100, 500, 700, 500, 800]
}
{
    "_id" : ObjectId("5e5b59f72ae06a1609a00b17"), "Values" : [20, 40, 30, 10, 60]
}

คำสั่ง Aggregation ค้นหา index ของ 10 และ 40 ใน Values

> db.demo381.aggregate([
    {"$project":{
        "Result":{
            "$map":{
                "input":[10,40],
                "in":{"$indexOfArray":["$Values","$$this"]}
            }
        }
    }}
])

ผลลัพธ์

{ "_id" : ObjectId("5e5b59f72ae06a1609a00b15"), "Result" : [0, 1] }
{ "_id" : ObjectId("5e5b59f72ae06a1609a00b16"), "Result" : [-1, -1] }
{ "_id" : ObjectId("5e5b59f72ae06a1609a00b17"), "Result" : [3, 1] }

คำอธิบาย:

  • เอกสารที่ 1: 10 อยู่ index 0, 40 อยู่ index 1
  • เอกสารที่ 2: ไม่มี 10 และ 40 คืน -1 ทั้งคู่
  • เอกสารที่ 3: 10 อยู่ index 3, 40 อยู่ index 1
  • $indexOfArray คืน index แรกที่พบ (first occurrence)