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

Cách đặt $ set các mục phụ mảng con trong MongoDB

Nếu bạn biết chỉ mục trong mảng, bạn có thể truy cập trực tiếp vào phần tử của mảng bằng cách sử dụng ký hiệu dấu chấm.

update(
{ _id: ObjectId(xxxx) },
{ $set: { 'columns.0.panels.0.top' : 125}}
)

Đảm bảo bạn đặt đường dẫn có ký hiệu dấu chấm trong dấu ngoặc kép dưới dạng một chuỗi.

Chỉnh sửa:

Để cung cấp thêm chi tiết về cách điều này có thể hoạt động động, tôi sẽ đưa ra một ví dụ trong PHP:

$action = array("columns.$colNum.panels.$panelNum" => $newValue);

Có, đó là toán tử vị trí nhưng nó dường như không đủ nâng cao để thay đổi mảng trong mảng, điều này có thể thay đổi trong MongoDB 1.7.0

Có một giải pháp thay thế mà bạn có thể làm thay vì cố gắng nhồi nhét thông tin này vào một tài liệu lồng nhau. Cố gắng làm phẳng nó ra. Bạn có thể tạo một bộ sưu tập có các đối tượng bảng &cột:

đối tượng cột:

{
_id: // MongoId
type: 'column',
user: 'username',
order: 1,
width: 30,
}

đối tượng bảng điều khiển:

{
_id: //MongoId
type: 'panel',
user: 'username',
parentColumn: //the columns _id string
top: 125,
left: 100
}

Sau đó, bạn có thể tìm thấy tất cả các cột thuộc về người dùng bằng cách thực hiện:

find({ type: 'column', user:'username'});

Bạn có thể tìm thấy tất cả các bảng cho một cột cụ thể bằng cách thực hiện:

find({type: 'panel', columnOwner:'ownerID'});

Vì mỗi cột và bảng điều khiển sẽ có một ID duy nhất do MongoDB cung cấp cho nó, bạn có thể dễ dàng truy vấn và thiết lập các tùy chọn.

update({'_id': ObjectId('idstring')}, {$set : { 'top' : 125}});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chỉ mục phạm vi ngày Mongo với bộ lọc

  2. Khi nào đến Redis? Khi nào đến MongoDB?

  3. MongoDb Spring tìm trong đối tượng lồng nhau

  4. Mongoose tìm tài liệu nếu mảng chứa một giá trị

  5. Nén (rút ngắn) chuỗi PHP từ 24 ký tự xuống 20 ký tự