Trước hết, chào mừng bạn đến với MongoDB!
Điều cần nhớ là MongoDB sử dụng cách tiếp cận "NoSQL" để lưu trữ dữ liệu, vì vậy hãy loại bỏ những suy nghĩ về lựa chọn, kết hợp, v.v. khỏi tâm trí của bạn. Cách nó lưu trữ dữ liệu của bạn dưới dạng tài liệu và bộ sưu tập, cho phép một phương tiện động để thêm và lấy dữ liệu từ các vị trí lưu trữ của bạn.
Nói như vậy, để hiểu khái niệm đằng sau tham số $ unwind, trước tiên bạn phải hiểu trường hợp sử dụng mà bạn đang cố gắng trích dẫn đang nói gì. Tài liệu ví dụ từ mongodb.org như sau:
{
title : "this is my title" ,
author : "bob" ,
posted : new Date () ,
pageViews : 5 ,
tags : [ "fun" , "good" , "fun" ] ,
comments : [
{ author :"joe" , text : "this is cool" } ,
{ author :"sam" , text : "this is bad" }
],
other : { foo : 5 }
}
Lưu ý rằng các thẻ thực sự là một mảng gồm 3 mục, trong trường hợp này là "vui", "tốt" và "vui".
Những gì $ unwind làm là cho phép bạn bóc một tài liệu cho từng phần tử và trả về tài liệu kết quả đó. Để nghĩ về điều này theo cách tiếp cận cổ điển, nó sẽ tương đương với "đối với mỗi mục trong mảng thẻ, trả về một tài liệu chỉ có mục đó".
Do đó, kết quả của việc chạy như sau:
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
sẽ trả lại các tài liệu sau:
{
"result" : [
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "good"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
}
],
"OK" : 1
}
Lưu ý rằng điều duy nhất thay đổi trong mảng kết quả là những gì được trả về trong giá trị thẻ. Nếu bạn cần tham khảo thêm về cách thức hoạt động của nó, tôi đã bao gồm một liên kết ở đây . Hy vọng rằng điều này sẽ hữu ích và chúc bạn may mắn khi bước vào một trong những hệ thống NoSQL tốt nhất mà tôi đã xem xét cho đến nay.