2011-01-03 42 views
10
Blog { 
    id:"001" 
    title:"This is a test blog", 
    content:"...." 
    comments:[{title:"comment1",content:".."},{title:"comment2",content:"..."}]  
} 

nhận xét là danh sách nội bộ trong blog.Làm cách nào để cập nhật/chèn đối tượng vào danh sách bên trong trong Mongodb?

Nhưng làm cách nào tôi có thể truy xuất chỉ nhận xét1? và làm cách nào để chèn/cập nhật nhận xét mới vào blog? Nếu tôi nhận được blog đầy đủ và chèn/cập nhật nội dung vào danh sách nhận xét, sau đó lưu toàn bộ blog, cách giải quyết đồng thời isuue?

Cảm ơn.

Trả lời

5

Để tìm nạp tài liệu được nhúng, bạn cần tìm nạp tài liệu chính và tìm kiếm trên các nhận xét của mình được nhúng tài liệu tài liệu bạn muốn. Không có cách nào để làm tốt hơn trong MongoDB thực sự.

Để chèn/cập nhật trong tài liệu được nhúng, bạn có thể sử dụng hệ thống truy vấn $push$set để thực hiện điều đó.

+0

Cảm ơn, Nhưng tôi chỉ muốn nhận được bình luận1, và tôi cần nhận được tất cả các bình luận? Nó có thể phát hành hiệu suất nếu số lượng bình luận lớn .. –

+0

bạn đúng đó là lý do tại sao nó không phải là một thiết kế tốt để sử dụng tài liệu nhúng với một số tài liệu để phát triển trong thời gian. Bạn cần phải chờ đợi bộ sưu tập ảo để làm điều đó trong tương lai – shingara

21
Blog { 
    id:"001" 
    title:"This is a test blog", 
    content:"...." 
    comments:[{title:"comment1",content:".."},{title:"comment2",content:"..."}]  
} 

Để chèn chú thích mới, sử dụng $push:

db.blogs.update({id:"001"}, {$push:{comments:{title:"commentX",content:".."}}}); 

Để cập nhật một nhận xét, sử dụng $set:

db.blogs.update({id:"001"}, {$set :{"comments.2": {...} }}); 
db.blogs.update({id:"001"}, {$set :{"comments.2.title": "new title" }}); 

2 là chỉ số của bình luận nào. Việc sử dụng dấu ngoặc kép là cần thiết.

+1

Một câu trả lời thực tế hơn - nên được đánh dấu là được chấp nhận –

+0

Tôi có một nghi ngờ whith giải pháp này, nếu 2 chủ đề khác nhau, gọi db.blogs.update cùng một lúc (điều kiện chủng tộc), Mongo sẽ đảm bảo 2 mục của danh sách được lưu tại tài liệu? – landrady

1

Để cập nhật Nhận xét cụ thể theo tiêu đề.

db.blogs.update({'comments.title': 'comment1'}, {$set :{"comments.$.title": "new title" }}); 

Bạn cũng có thể cập nhật nội dung nhận xét với tiêu đề của nó.

db.blogs.update({'comments.title': 'comment1'}, 
{$set :{"comments.$.title": "new title", 'comments.$.content': 'this is content' }}); 

Nếu có vấn đề gì, hãy trả lời tôi.

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