Với bộ sưu tập sau MongoDB của tài liệu:Nhận tài liệu với thẻ trong danh sách, sắp xếp theo tổng số các trận đấu
{
title : 'shirt one'
tags : [
'shirt',
'cotton',
't-shirt',
'black'
]
},
{
title : 'shirt two'
tags : [
'shirt',
'white',
'button down collar'
]
},
{
title : 'shirt three'
tags : [
'shirt',
'cotton',
'red'
]
},
...
Làm thế nào để bạn lấy một danh sách các mục phù hợp với danh sách các thẻ, ra lệnh cho tổng số thẻ phù hợp? Ví dụ, đưa ra danh sách các thẻ như là đầu vào:
['shirt', 'cotton', 'black']
Tôi muốn để lấy các mặt hàng xếp theo thứ tự giảm dần theo tổng số phù hợp với thẻ:
item total matches
-------- --------------
Shirt One 3 (matched shirt + cotton + black)
Shirt Three 2 (matched shirt + cotton)
Shirt Two 1 (matched shirt)
Trong một lược đồ quan hệ, thẻ sẽ là một bảng riêng biệt và bạn có thể tham gia vào bảng đó, đếm các trận đấu và sắp xếp theo số lượng.
Nhưng, ở Mongo ...?
Có vẻ phương pháp này có thể làm việc,
- phá vỡ các thẻ đầu vào thành nhiều "IN" báo cáo
- truy vấn cho các mục bằng cách "OR" 'ing cùng các đầu vào thẻ
- tức là nơi (' áo sơ mi 'IN items.tags) HOẶC (' cotton 'IN items.tags)
- điều này sẽ trở lại, ví dụ: ba trường hợp "Áo một", 2 trường hợp "Áo ba", v.v.
- bản đồ/giảm sản lượng
- bản đồ: emit (this._id, {...});
- giảm: đếm tổng số lần xuất hiện của _id
- Finalize: Sắp xếp theo tính tổng
Nhưng tôi không rõ ràng về cách thực hiện điều này như một truy vấn Mongo, hoặc nếu điều này là ngay cả những cách tiếp cận hiệu quả nhất.
Có vẻ như công việc M/R đơn giản. –
Không có M/R là đơn giản trong mã sản xuất kể từ khi thực hiện hiện tại thiếu song song thích hợp. Trong thực tế, một trường hợp tốt có thể được thực hiện để tránh m/r hoàn toàn trong các tình huống thông lượng cao. –