Tôi nghĩ rằng tôi hiểu những gì bạn đang hỏi. Câu trả lời khá đơn giản với Map / Reduce.
Giả sử bạn có những tài liệu về người sau:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Bạn có thể muốn gửi khóa của mình dưới dạng sở thích, với giá trị là tên của người đó (hoặc _id
).
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Kết quả xem của bạn sẽ giống như sau:
- máy tính => Người A
- máy tính => Người B
- câu cá => Người A
- chơi game => Người B
- chơi game => Người D
- đi bộ đường dài => Người C
- thể thao => Người A
- thể thao => Người C
Để có được danh sách những người quan tâm đến máy tính, bạn có thể chỉ cần gửi key="computers"
như một phần của chuỗi truy vấn.
Nếu bạn muốn thêm chức năng giảm vào bản đồ của mình, bạn có thể chỉ cần sử dụng _count
(phím tắt để sử dụng hàm rút gọn đã biên dịch) và bạn có thể truy xuất số lượng tất cả những người có mối quan tâm cụ thể, thậm chí bạn có thể sử dụng phím tắt đó để giới hạn những mối quan tâm mà bạn truy vấn để xây dựng mối quan hệ của mình.