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

Bản ghi dự án MongoDB đã cập nhật trong một mảng lồng nhau trong truy vấn findAndModify

Bạn cũng có thể thử mã positional $ toán tử được sử dụng với findAndModify () phương pháp. Toán tử sẽ xác định phần tử trong một mảng để cập nhật mà không chỉ định rõ ràng vị trí của phần tử trong mảng. Lưu ý, trường mảng phải xuất hiện như một phần của tài liệu truy vấn và để trả lại tài liệu với các sửa đổi được thực hiện trên bản cập nhật, hãy sử dụng tùy chọn mới, do đó, bản cập nhật của bạn sẽ giống như

db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: { "arr": 1, "_id": 0 }   
})

sẽ tạo ra sự kiện:

{
    "arr": [
        {
            "cond" : 1,
            "upd" : 2
        },
        {
            "cond" : 2,
            "upd" : 3
        },
        {
            "cond" : 4,
            "upd" : 55
        },
        {
            "cond" : 6,
            "upd" : 7
        },
        {
            "cond" : 8,
            "upd" : 9
        }
    ]
}

Vì bạn muốn trả lại tài liệu đã cập nhật, với phép chiếu vị trí $ chiếu toán tử chỉ có thể được sử dụng trong tài liệu chiếu của find () hoặc findOne () nên findAndModify () trường của tùy chọn sẽ không chiếu phần đó của mảng bằng cách sử dụng $ chiếu nhà điều hành.

Một giải pháp thay thế là sử dụng JavaScript gốc filter () trên trường arr được trả về là

var result = db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: { "arr": 1, "_id": 0 }   
})

var updated = []
if (result && result.arr) updated = result.arr.filter(function (item) { return item.cond == 4; });
printjson(updated);

Điều này sẽ in

[ { "cond" : 4, "upd" : 55 } ]

- CẬP NHẬT -

Hoặc $ elemMatch như bạn đã đề xuất trong các bình luận bên dưới:

var result = db.tests.findAndModify({
    query: {
        "arr.cond": 4
    },
    update: {
        "$set": {"arr.$.upd": 55 }
    },
    new : true,
    fields: {"arr": {"$elemMatch": { "cond": 4 } }, "_id": 0 }   
})

printjson(result);

Đầu ra :

{ "arr" : [ { "cond" : 4, "upd" : 55 } ] }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cập nhật mật khẩu băm với mongoose express

  2. Truy xuất dữ liệu từ bộ sưu tập MongoDB vào Swing JTable

  3. MongoDB:Cách tìm mức lương cao thứ n từ bộ sưu tập

  4. Cách chuyển đổi bộ bản sao MongoDB thành một máy chủ độc lập

  5. docker-comp MongoDB Lỗi:lỗi mạng khi cố gắng chạy lệnh 'isMaster' trên máy chủ