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

MongoDB Aggregate: กรอง Subdocument ที่มีฟิลด์เฉพาะด้วย $exists + $unwind


สร้างคอลเลกชันตัวอย่าง

> db.demo285.insertOne(
  { details: [
    { Name: "Chris" },
    { Name2: "Bob" },
    { Name: "Mike" }
  ] }
);
{ "acknowledged": true, "insertedId": ObjectId("5e4abffef49383b52759cbb9") }

แสดงข้อมูล

> db.demo285.find();
{ "_id": ObjectId("5e4abffef49383b52759cbb9"), "details": [ { "Name": "Chris" }, { "Name2": "Bob" }, { "Name": "Mike" } ] }

คิวรี Aggregate: $match $exists -> $unwind -> $match $exists -> $project

> db.demo285.aggregate([
  { $match: { 'details.Name': { $exists: 1 } } },
  { $unwind: "$details" },
  { $match: { 'details.Name': { $exists: 1 } } },
  { $project: { Name: "$details.Name", _id: 0 } }
])

ผลลัพธ์: เฉพาะ Subdocument ที่มีฟิลด์ Name

{ "Name": "Chris" }
{ "Name": "Mike" }