2013-08-05 23 views
5

Tôi có một tài liệu với một mảng lồng nhau của tài liệu mà không có id

_id: adsjfdsau7Hukad, 
'nested':[{ a:'123456',b:'zzzzzzzzz'}, 
      {a:'788123',b:'6yuuuuuu'}, 
      {a:'123456',b:'ooo998uj'}] 

Tôi muốn tăng một tài sản mới , 'c' trong phần tử được chỉ định của tài liệu đã xác định. Ví dụ:

db.collection.update({_id:'adsjfdsau7Hukad'},{$inc:{'nested.2.c':1}}) 

Điều này hoạt động khi tôi có thể viết rõ ràng yếu tố định danh thứ tự phần tử. Nhưng, tôi cần phải chuyển một biến cho vị trí thứ tự của phần tử, và tôi đã không tìm ra cách để làm điều đó. Tôi đã thử điều này:

var num = 4 ## as example 
db.collection.update({_id:'adsjfdsau7Hukad','nested.$': num},{$inc:{'nested.$.c':1}}) 

nhưng điều này dường như không hoạt động.

Bất kỳ ý tưởng nào?

Trả lời

8

Bạn cần phải tạo ra chìa khóa của bạn cách lập trình:

Trong vỏ:

var num = 4; 
var inc = {}; 
inc['nested.' + num + '.c'] = 1; 
db.collection.update({_id: 'adsjfdsau7Hukad'}, {$inc: inc}) 

Trong pymongo:

num = 4 
db.collection.update(
    {'_id': 'adsjfdsau7Hukad'}, 
    {'$inc': {'nested.' + str(num) + '.c': 1}}) 
+0

Đó chính xác là những gì tôi nghĩ ** nên ** làm việc. Nhưng tôi đã thử 8 cách hình thức chủ nhật và nó chỉ không hoạt động. Tôi đã thực thi phiên bản shell mà bạn đã đề xuất và nhận các thông tin sau: 'Thứ Hai ngày 19 tháng 8: 46: 33.395 Không thực hiện được JavaScript: Cú phápError: Mã thông báo không mong muốn +' –

+0

Chỉnh sửa đó đã hoạt động đối với trình bao. Vẫn gặp sự cố với Python, nhưng có thể là do tôi quen với PHP hơn. –