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

คลายสองอาร์เรย์จาก MongoDB


หากต้องการผ่อนคลาย ให้ใช้ $unwind $unwind แยกโครงสร้างฟิลด์อาร์เรย์ออกจากเอกสารอินพุตเพื่อส่งออกเอกสารสำหรับแต่ละองค์ประกอบ

ให้เราสร้างคอลเลกชันที่มีเอกสาร -

> db.demo515.insertOne(
... {
...    "details1": [
...       "4700100004"
...    ],
...    "details2": [
...       "Not Given"
...    ],
...    "Value1": [
...       "56",
...       "45",
...       "35",
...    ],
...    "Value2": [
...       "35",
...       "45",
...       "56",
...    ]}
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e889e51987b6e0e9d18f590")
}

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -

> db.demo515.find();

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

{ "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [
"Not Given" ], "Value1" : [ "56", "45", "35" ], "Value2" : [ "35", "45", "56" ] }

ต่อไปนี้เป็นแบบสอบถามเพื่อคลายสองอาร์เรย์ -

> db.demo515.aggregate([
... { $unwind: { path: "$Value1", includeArrayIndex : "index1" } },
... { $unwind: { path: "$Value2", includeArrayIndex : "index2" } },
... { $project: {
...    _id : 1,
...    details1: 1,
...    details2: 1,
...    Value1: 1,
...    Value2: 1,
...    valid: { $eq: ["$index1", "$index2"] } }
... },
... { $match: { valid: true } }
... ]);

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

{ "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [
"Not Given" ], "Value1" : "56", "Value2" : "35", "valid" : true }
{ "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [
"Not Given" ], "Value1" : "45", "Value2" : "45", "valid" : true }
{ "_id" : ObjectId("5e889e51987b6e0e9d18f590"), "details1" : [ "4700100004" ], "details2" : [
"Not Given" ], "Value1" : "35", "Value2" : "56", "valid" : true }