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

Bản cập nhật Mongodb được lồng sâu vào tài liệu con

Rất tiếc, bạn không thể sử dụng $ toán tử nhiều hơn một lần cho mỗi khóa, vì vậy bạn phải sử dụng các giá trị số cho phần còn lại. Như trong:

db.myCollection.update({
    "id": 1, 
    "forecasts.forecast-id": 123, 
    "forecasts.levels.level": "proven", 
    "forecasts.levels.configs.config": "Custom 1"
  },
  {"$set": {"forecasts.$.levels.0.configs.0": newData}}
)

MongoDB hỗ trợ cập nhật các mảng lồng nhau là kém. Vì vậy, tốt nhất bạn nên tránh sử dụng chúng nếu bạn cần cập nhật dữ liệu thường xuyên và thay vào đó hãy cân nhắc sử dụng nhiều bộ sưu tập.

Một khả năng:đưa ra forecasts bộ sưu tập của riêng nó và giả sử bạn có một bộ level cố định giá trị, tạo level một đối tượng thay vì một mảng:

{
  _id: 123,
  parentId: 1,
  name: "Forecast 1", 
  levels: {
    proven: { 
      configs: [
        { 
          config: "Custom 1",
          variables: [{ x: 1, y:2, z:3}]
        }, 
        { 
          config: "Custom 2",
          variables: [{ x: 10, y:20, z:30}]
        }, 
      ]
    },
    likely: {
      configs: [
        { 
          config: "Custom 1",
          variables: [{ x: 1, y:2, z:3}]
        }, 
        { 
          config: "Custom 2",
          variables: [{ x: 10, y:20, z:30}]
        }, 
      ]
    }
  }
}

Sau đó, bạn có thể cập nhật nó bằng cách sử dụng:

db.myCollection.update({
    _id: 123,
    'levels.proven.configs.config': 'Custom 1'
  },
  { $set: { 'levels.proven.configs.$': newData }}
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. sử dụng $ và với $ match trong mongodb

  2. MongoDB nhanh nhất trên Azure!

  3. Tại sao mongoDB sử dụng objectID?

  4. Thông báo ClusterControl 1.7.1:Hỗ trợ PostgreSQL 11 và MongoDB 4.0, Giám sát nâng cao

  5. Sự cố với MongoDB GridFS Lưu tệp với Node.JS