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

วิธีทำให้สอง "คอลัมน์" ใน MongoDB ไม่ซ้ำกัน?


ใช้เฉพาะและตั้งค่าเป็น TRUE ให้เราใช้สิ่งเดียวกันโดยสร้างดัชนีและตั้งค่าสองคอลัมน์ให้ไม่ซ้ำกัน -

>db.keepTwoColumnsUniqueDemo.createIndex({"StudentFirstName":1,"StudentLastName":1},{unique:true});
{
   "createdCollectionAutomatically" : true,
   "numIndexesBefore" : 1,
   "numIndexesAfter" : 2,
   "ok" : 1
}

ตอนนี้คุณสามารถแทรกเอกสารในคอลเลกชันข้างต้น -

>db.keepTwoColumnsUniqueDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd30fd7b64f4b851c3a13e5")
}
>db.keepTwoColumnsUniqueDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Doe","StudentAge":23});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd30fe5b64f4b851c3a13e6")
}
>db.keepTwoColumnsUniqueDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith","StudentAge":24});
2019-05-08T22:50:42.803+0530 E QUERY [js] WriteError: E11000 duplicate key error collection: sample.keepTwoColumnsUniqueDemo index: StudentFirstName_1_StudentLastName_1 dup key: { : "John", : "Smith" } :
WriteError({
"index" : 0,
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: sample.keepTwoColumnsUniqueDemo index: StudentFirstName_1_StudentLastName_1 dup key: { : \"John\", : \"Smith\" }",
"op" : {
"_id" : ObjectId("5cd30feab64f4b851c3a13e7"),
"StudentFirstName" : "John",
"StudentLastName" : "Smith",
"StudentAge" : 24
}
})
WriteError@src/mongo/shell/bulk_api.js:461:48
Bulk/mergeBatchResults@src/mongo/shell/bulk_api.js:841:49
Bulk/executeBatch@src/mongo/shell/bulk_api.js:906:13
Bulk/this.execute@src/mongo/shell/bulk_api.js:1150:21
DBCollection.prototype.insertOne@src/mongo/shell/crud_api.js:252:9
@(shell):1:1

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

duplicate key error collection

ต่อไปนี้เป็นแบบสอบถามเพื่อแสดงเอกสารทั้งหมดจากคอลเลกชันโดยใช้วิธี find() -

> db.keepTwoColumnsUniqueDemo.find().pretty();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{
   "_id" : ObjectId("5cd30fd7b64f4b851c3a13e5"),
   "StudentFirstName" : "John",
   "StudentLastName" : "Smith",
   "StudentAge" : 21
}
{
   "_id" : ObjectId("5cd30fe5b64f4b851c3a13e6"),
   "StudentFirstName" : "John",
   "StudentLastName" : "Doe",
   "StudentAge" : 23
}