MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Áp dụng điều kiện cho nhiều tài liệu cho cùng một trường trong MongoDB

Vì MongoDB không có khái niệm về phép nối, bạn cần giải quyết vấn đề này bằng cách giảm đầu vào của mình thành một tài liệu duy nhất.

Nếu bạn thay đổi cấu trúc tài liệu của mình để bạn đang lưu trữ một mảng thẻ, như sau:

{id: 123,  tag:["tag1","tag2","tag3"]}
{id: 456,  tag:["tag1"]}

Bạn có thể thực hiện một truy vấn như sau:

db.user.find({$and:[{tag:"tag1"},{tag:"tag2"},{tag:"tag3"}]})

Nếu cần, bạn có thể viết map-Reduce để tạo ra một mảng thẻ cho một userid, vì vậy bạn có thể thực hiện truy vấn trên trên đó.

Chỉnh sửa - Bao gồm thu nhỏ bản đồ đơn giản

Đây là một thao tác rút gọn bản đồ thực sự đơn giản để đưa dữ liệu đầu vào ban đầu thành một định dạng hữu ích cho find truy vấn đưa ra ở trên.

var map = function() {emit(this.id, {tag:[this.tag]});}
var reduce = function(key, values){
   var result_array=[];
   values.forEach(function(v1){             
       v1.tag.forEach(function(v2){
        result_array.push(v2);
        });
    });
return {"tag":result_array};}

var op = db.user.mapReduce(map, reduce, {out:"mr_results"})

Sau đó, bạn có thể truy vấn trên tập hợp đầu ra thu gọn bản đồ, như sau:

db.mr_results.find({$and:[{"value.tag":"tag1"},{"value.tag":"tag2"}, {"value.tag":"tag3"}]})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách cấu hình Rebus để có các chủ đề dựa trên loại trình xử lý

  2. Thuộc tính động với Rails và Mongoid

  3. Chèn hiệu suất của node-mongodb-native

  4. Cập nhật tài liệu nhúng trong MongoDB với trình điều khiển C # chính thức

  5. Node.js + MongoDB - findOne () trả về một trường không hoạt động