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

Có thể sử dụng phép chiếu truy vấn trên cùng một bộ sưu tập có phép chiếu $ elemMatch không?

Có, có hai cách để làm điều này. Vì vậy, bạn có thể sử dụng $ elemMatch về mặt chiếu như bạn đã có, với những thay đổi nhỏ:

Model.findById(id,
   { "comments": { "$elemMatch": {"created.by": "Jane" } } },
   function(err,doc) {

Hoặc chỉ cần thêm vào phần truy vấn và sử dụng $ vị trí nhà điều hành:

Model.findOne(
    { "_id": id, "comments.created.by": "Jane" },
    { "comments.$": 1 },
    function(err,doc) {

Cách nào cũng hoàn toàn hợp lệ.

Nếu bạn muốn điều gì đó liên quan hơn một chút, bạn có thể sử dụng .aggregate () và đó là $ project toán tử thay thế:

Model.aggregate([
    // Still match the document
    { "$match": "_id": id, "comments.created.by": "Jane" },

    // Unwind the array
    { "$unwind": "$comments" },

    // Only match elements, there can be more than 1
    { "$match": "_id": id, "comments.created.by": "Jane" },

    // Project only what you want
    { "$project": {
        "comments": {
            "body": "$comments.body",
            "by": "$comments.created.by"
        }
    }},

    // Group back each document with the array if you want to
    { "$group": {
        "_id": "$_id",
        "comments": { "$push": "$comments" }
    }}
],
function(err,result) {

Vì vậy, khung tổng hợp có thể được sử dụng cho nhiều mục đích hơn là chỉ tổng hợp các kết quả. Đó là $ project toán tử cung cấp cho bạn sự linh hoạt hơn so với phép chiếu sử dụng .find () . Nó cũng cho phép bạn lọc và trả về nhiều kết quả mảng, đây cũng là điều không thể thực hiện được với phép chiếu trong .find () .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để cập nhật một khóa cụ thể bên trong tài liệu con MongoDB bằng cách sử dụng Sails.js &Waterline?

  2. Tải lên và truy xuất tệp bằng MongoDB và Spring Boot

  3. chèn mongodb cho thấy 'các chuỗi trong tài liệu phải là UTF-8 hợp lệ'

  4. lưu một đối tượng có mối quan hệ hai chiều trong mongodb bằng cách sử dụng trình điều khiển c # chính thức

  5. golang mongodb (mgo) không chèn tài liệu