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

Truy vấn đối sánh tổng hợp Mongodb với mức độ ưu tiên đối sánh đầy đủ

Với ví dụ chính xác của bạn, điều này có thể được thực hiện theo cách sau - nếu tình huống thế giới thực của bạn phức tạp hơn một chút, bạn có thể gặp phải vấn đề, tuy nhiên:

db.accounts.aggregate([{
    $match: {
        "username": /pat/i // find all documents that somehow match "pat" in a case-insensitive fashion
    }
}, {
    $addFields: {
        "exact": { 
            $eq: [ "$username", "pat" ] // add a field that indicates if a document matches exactly
        },
        "startswith": { 
            $eq: [ { $substr: [ "$username", 0, 3 ] }, "pat" ] // add a field that indicates if a document matches at the start
        }

    }
}, {
    $sort: {
        "exact": -1, // sort by our primary temporary field
        "startswith": -1 // sort by our seconday temporary
    }
}, {
    $project: {
        "exact": 0, // get rid of the "exact" field,
        "startswith": 0 // same for "startswith"
    }
}])

Một cách khác sẽ là sử dụng $facet điều này có thể tỏ ra mạnh mẽ hơn một chút bằng cách cho phép các kịch bản phức tạp hơn nhưng chậm hơn (mặc dù vậy, một số người ở đây sẽ ghét tôi đối với đề xuất này):

db.accounts.aggregate([{
    $facet: { // run two pipelines against all documents
        "exact": [{ // this one will capture all exact matches
            $match: {
                "username": "pat"
            }
        }],
        "others": [{ // this one will capture all others
            $match: {
                "username": { $ne: "pat", $regex: /pat/i }
            }
        }]
    }
}, {
    $project: {
        "result": { // merge the two arrays
            $concatArrays: [ "$exact", "$others" ]
        }
    }
}, {
    $unwind: "$result" // flatten the resulting array into separate documents
}, {
    $replaceRoot: { // restore the original document structure
        "newRoot": "$result"
    }
}])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. lỗi mongoDB:Lỗi:không kết nối được với [localhost:27017]

  2. Cách tiếp cận tốt hơn để lưu trữ và truy vấn một tập dữ liệu lớn về dữ liệu khí tượng là gì

  3. mongoose truy vấn cùng một trường với các giá trị khác nhau

  4. Xóa mọi thứ trong cơ sở dữ liệu MongoDB

  5. phép chiếu không hoạt động với truy vấn tìm