Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Lấy tất cả trường lồng nhau từ collection MongoDB

Dùng aggregate với $unwind và $project để "làm phẳng" (flatten) mảng object lồng nhau thành các document riêng biệt.

Tạo collection demo138:

> db.demo138.insertOne({
   "Id":101,
   "PlayerDetails": [
      {"PlayerName":"Chris","PlayerScore":400},
      {"PlayerName":"David","PlayerScore":1000}
   ]
});
> db.demo138.insertOne({
   "Id":102,
   "PlayerDetails": [
      {"PlayerName":"Bob","PlayerScore":500},
      {"PlayerName":"Carol","PlayerScore":600}
   ]
});

Pipeline: unwind PlayerDetails, project lấy các trường con:

> db.demo138.aggregate([
   { $unwind: "$PlayerDetails" },
   { $project: {
      "PlayerName": "$PlayerDetails.PlayerName",
      "PlayerScore": "$PlayerDetails.PlayerScore"
   }}
]);

Kết quả 4 document riêng biệt (mỗi player một dòng):

{
   "_id" : ObjectId("5e31bb9ffdf09dd6d08539a1"),
   "PlayerName" : "Chris",
   "PlayerScore" : 400
}
{
   "_id" : ObjectId("5e31bb9ffdf09dd6d08539a1"),
   "PlayerName" : "David",
   "PlayerScore" : 1000
}
... (Bob, Carol)