Nói sử dụng Map-Reduce
để tạo một bộ sưu tập riêng biệt lưu trữ genre
dưới dạng một mảng có các giá trị đến từ chuỗi được phân tách bằng dấu phẩy phân tách, sau đó bạn có thể chạy công việc Map-Reduce và quản lý các truy vấn trên tập hợp đầu ra.
Ví dụ:tôi đã tạo một số tài liệu mẫu cho foo
bộ sưu tập:
db.foo.insert([
{genre: 'Action, Adventure, Sci-Fi'},
{genre: 'Thriller, Romantic'},
{genre: 'Comedy, Action'}
])
Thao tác bản đồ / thu nhỏ sau sẽ tạo ra bộ sưu tập mà từ đó bạn có thể áp dụng các truy vấn hiệu quả:
map = function() {
var array = this.genre.split(/\s*,\s*/);
emit(this._id, array);
}
reduce = function(key, values) {
return values;
}
result = db.runCommand({
"mapreduce" : "foo",
"map" : map,
"reduce" : reduce,
"out" : "foo_result"
});
Truy vấn sẽ đơn giản, tận dụng các truy vấn với chỉ mục nhiều khóa trên giá trị value
lĩnh vực:
db.foo_result.createIndex({"value": 1});
var genre = ['Action', 'Adventure'];
db.foo_result.find({'value': {'$in': genre}})
Đầu ra :
/* 0 */
{
"_id" : ObjectId("55842af93cab061ff5c618ce"),
"value" : [
"Action",
"Adventure",
"Sci-Fi"
]
}
/* 1 */
{
"_id" : ObjectId("55842af93cab061ff5c618d0"),
"value" : [
"Comedy",
"Action"
]
}