2012-06-25 34 views
7

Đây là định dạng của tài liệu của tôi: Làm thế nào để tăng MongoDB lĩnh vực đối tượng tài liệu bên trong một mảng

{ 
    _id: some id, 
    name: 'some name', 
    versions: [] 
} 

Trong versions lĩnh vực tôi lưu trữ các đối tượng như {v: '2.5', count: 5} nơi count nắm giữ số lần một phiên bản đang được sử dụng .

Cách đơn giản nhất để làm như sau là gì?

  1. Chèn một đối tượng mới bên trong mảng versions nếu nó không tồn tại
  2. FF một phiên bản đặc biệt tồn tại bên trong các mảng versions sau đó tăng count

Trả lời

10

đơn giản cách con người nên nó,

db.collection.update({versions.v:'some_version'},{"$inc":{"versions.$.count":1}}); 

Điều này sẽ tăng số của bạn nếu có ion là tồn tại, nhưng như tài liệu MongoDB nói, $ nhà điều hành không thể được trộn lẫn với upsert, do đó, trên truy vấn sẽ không dẫn đến chèn nếu {versions.v:'some_version'} không thành công.

Toán tử vị trí không thể được kết hợp với upsert vì nó yêu cầu phần tử mảng phù hợp. Nếu kết quả cập nhật của bạn trong một chèn thì "$" theo nghĩa đen sẽ được sử dụng làm tên trường.

Dưới đây là vé JIRA để hỗ trợ upsert với $. Bạn có thể bỏ phiếu và xem những vấn đề này.

Upsert with $-positional operator can create bad documents

Support $ positional operator with an upsert

Các vấn đề liên quan