2009-07-17 70 views
15

Nói rằng tôi có một cái gì đó cấu trúc dữ liệu như thế này:tài liệu cập nhật lồng nhau trong MongoDB

{ 
    'name': 'test', 
    'anotherdoc': { 
     'something': 'someval', 
     'somenum': 1 
    } 
} 

Bây giờ, nói rằng tôi muốn thiết lập một cái gì đó. Ban đầu, tôi mặc dù nó sẽ được thực hiện như vậy:

collection.update({'_id': myid}, {$set: {'anotherdoc.something': 'somenewval'}); 

Điều này, tuy nhiên, có vẻ không chính xác. Nó đặt một số dữ liệu trong đó, nhưng nó làm như vậy một cách kỳ lạ. Nó sẽ, trong trường hợp này, kết thúc như vậy:

[ 
    { 
     'name': 'test', 
     'anotherdoc': { 
      'something': 'someval', 
      'somenum': 1 
     } 
    }, 
    ['anotherdoc.something', 'someval'] 
] 

Tất nhiên, không phải những gì tôi đang tìm kiếm.

Trả lời

14

Tác phẩm sau đây cho tôi từ vỏ mongo - vì vậy tôi không chắc điều gì đã xảy ra ở trên cho bạn. Hãy thử điều này và xem nó có hoạt động không? Nếu vậy tôi sẽ nói lấy mã Mongo mới nhất trong trường hợp một cái gì đó sử dụng để có vấn đề.

x = { 'name': 'test', anotherdoc: { 'something': 'someval', somenum : 1 } } 
> x 
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}} 
> collection = db.foo; 
test.foo 
> collection.insert(x) 
> collection.find() 
{"_id" : ObjectId("4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}} 
> x 
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}} 
> x._id 
> x = collection.findOne() 
{"_id" : ObjectId("4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}} 
> collection.update({'_id': x._id}, {$set: {'anotherdoc.something': 'somenewval'}}) 
> collection.find() 
{"_id" : ObjectId("4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"somenum" : 1 , "something" : "somenewval"}} 
> 

Như đã đề cập ở trên, diễn đàn MongoDB có thể được xem nhanh hơn (hoặc thử IRC).

+0

hm, trung thực tôi đã làm thử nghiệm này trong python, thay vì sau đó trong trình thông dịch. Nếu nó hoạt động với trình thông dịch thì vấn đề phải nằm trong việc thực hiện điều này trong python. Tôi sẽ đến với diễn đàn MongoDB nếu tôi vẫn không thể làm cho nó hoạt động được. – defrex

+1

nếu 'anotherdoc.something' là một kiểu mảng, làm thế nào tôi có thể đẩy một phần tử khác vào đó? – Val

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