การสร้าง Multifield Indexes ใน Mongoose / MongoDB


93

ฉันกำลังพยายามหาเอกสารเกี่ยวกับวิธีสร้างดัชนีหลายฟิลด์ใน Mongoosejs แต่ไม่เป็นประโยชน์ โดยเฉพาะฉันมีสองฟิลด์ที่ต้องจัดทำดัชนีและไม่ซ้ำกัน อะไรคือตัวอย่างสคีมาพังพอนที่ทำดัชนีสองฟิลด์เข้าด้วยกัน

คำตอบ:


198

คุณเรียกindexวิธีการบนSchemaวัตถุที่จะทำตามที่แสดงไว้ที่นี่ สำหรับกรณีของคุณมันจะเป็นดังนี้:

mySchema.index({field1: 1, field2: 1}, {unique: true});

2
สิ่งนี้เรียกว่า Compount Index ใน mongodb ดังนั้นจึงสร้างดัชนีเป็น field1 และ field1 + field2 ดังนั้นจึงเป็นดัชนีแรกตาม field1 จากนั้นภายใน field1 เทียบกับฟิลด์ 2
Ketan Ghumatkar

1
ความหมายของ 1 after field1: และ field2:?
Damon Yuan

9
@DamonYuan พวกเขากำหนดลำดับการจัดเรียงของฟิลด์ในดัชนี 1จากน้อยไปมาก-1ก็จะลดลง
JohnnyHK

1
@KetanGhumatkar indexก็ขึ้นอยู่กับการสั่งซื้อฟิลด์มีการระบุไว้ในวัตถุในการเรียกร้องให้
JohnnyHK

2
1และ-1 ระบุคีย์ดัชนีจากน้อยไปมากหรือมากไปหาน้อยบนฟิลด์ดัชนี I found docs http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes/
Thai Ha

11

การกำหนดดัชนีที่ระดับสคีมาเป็นสิ่งที่จำเป็นเมื่อสร้างดัชนีผสม

animalSchema.index({ name: 1, type: -1 });

อ้างอิง: http://mongoosejs.com/docs/guide.html#indexes


5
ความหมายของ 1 และ -1 คืออะไร? ฉันไม่พบสิ่งนี้ในเอกสารที่คุณอ้างถึง ขอบคุณ.
DFB

2
ฉันพบคำตอบในหน้านี้: docs.mongodb.org/manual/core/indexes-introductionขอบคุณ!
DFB

0

อย่างไรก็ตามคำตอบที่ยอมรับนั้นไม่ถูกต้องตามhttps://stackoverflow.com/a/52553550/129300คุณควรรวมชื่อเขตข้อมูลไว้ในเครื่องหมายคำพูดเดี่ยวเช่น:

mySchema.index({'field1': 1, 'field2': 1}, {unique: true});

วันที่มีความสุข!


คีย์ออบเจ็กต์ใน JS สามารถยกเลิกการอ้างสิทธิ์ได้ตราบเท่าที่เป็นตัวระบุที่ถูกต้องทางวากยสัมพันธ์ field1และfield2เป็นตัวระบุที่ถูกต้อง field1.fooไม่ใช่เช่น
กัส

-3
    Following command can be used to create compound index for nested json:
    db.ACCOUNT_collection.createIndex({"account.id":1,"account.customerId":1},{unique:1}) 
Mongo json structure is like :
{"_id":"648738"
 "account": { 
    "id": "123",
    "customerId": 7879,
    "name": "test"
   ..
   ..

  }
}

ฉันได้ทดสอบกับข้อมูลตัวอย่างแล้วมันทำงานได้อย่างสมบูรณ์ตามที่คาดไว้


เราไม่ต้องการสิ่งนั้นด้วย mongooses shell ที่เราต้องการด้วย node js schema
Rohit Nishad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.