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

Làm cách nào để lấy tất cả các giá trị có chứa một phần của chuỗi bằng cách sử dụng mongoose find?

Bạn gần như đã tự trả lời câu hỏi này trong thẻ của mình. MongoDB có $regex toán tử cho phép một biểu thức chính quy được gửi dưới dạng truy vấn. Vì vậy, bạn truy vấn các chuỗi có chứa "Alex", bạn thực hiện như sau:

Books.find(
    { "authors": { "$regex": "Alex", "$options": "i" } },
    function(err,docs) { 
    } 
);

Bạn cũng có thể làm điều này:

Books.find(
    { "authors": /Alex/i }, 
    function(err,docs) { 

    }
);

Cả hai đều hợp lệ và khác với cách bạn đã thử theo đúng cú pháp được hỗ trợ như được hiển thị trong tài liệu.

Nhưng tất nhiên nếu bạn thực sự hỏi "làm thế nào để chỉ nhận được kết quả 'mảng' cho những kết quả khớp với 'Alex' ở đâu đó trong chuỗi?" thì điều này hơi khác một chút.

Đối sánh phức tạp cho nhiều hơn một phần tử mảng là miền của khung tổng hợp (hoặc có thể là mapReduce, nhưng tốc độ đó chậm hơn nhiều), nơi bạn cần "lọc" nội dung mảng.

Bạn bắt đầu giống nhau. Chìa khóa ở đây là $unwind để "khử chuẩn hóa" nội dung mảng để có thể "lọc" đúng như các tài liệu riêng lẻ. Sau đó, xây dựng lại mảng với các tài liệu "khớp".

Books.aggregate(
    [
        // Match first to reduce documents to those where the array contains the match
        { "$match": {
            "authors": { "$regex": "Alex", "$options": i }
        }},

        // Unwind to "de-normalize" the document per array element
        { "$unwind": "$authors" },

        // Now filter those document for the elements that match
        { "$match": {
            "authors": { "$regex": "Alex", "$options": i }
        }},

        // Group back as an array with only the matching elements
        { "$group": {
            "_id": "$_id",
            "title": { "$first": "$title" },
            "authors": { "$push": "$authors" },
            "subjects": { "$first": "$subjects" }
        }}
    ],
    function(err,results) {

    }
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kết hợp các toán tử $ regex và $ hoặc trong Mongo

  2. MongoDB để sử dụng Sharding với Toán tử tổng hợp $ tra cứu

  3. Trả về các phần tử mảng bên trong từ nhiều tài liệu ở dạng đã sắp xếp

  4. MongoDB:Thứ tự chỉ mục và thứ tự truy vấn phải khớp nhau?

  5. Liên kết &Tạo MongoDB tham gia bằng SQL:Phần 1