2015-04-16 18 views
6

Trong khi đọc về Mongo Lưu và cập nhật, tôi đã hơi nhầm lẫn -Như cho mỗi bài viếtMongoDB Lưu và cập nhật

cập nhật MongoDB của() và save() phương pháp được sử dụng để cập nhật tài liệu vào một bộ sưu tập. Bản cập nhật() giá trị phương pháp cập nhật trong tài liệu hiện có trong khi các phương pháp tiết kiệm() thay thế các tài liệu hiện có với các tài liệu được thông qua năm tiết kiệm() phương pháp.

Vui lòng cho tôi biết sự khác biệt trong cả hai.

+0

Một sự khác biệt đáng chú ý là phương pháp cập nhật có thể mất nhiều tranh cãi như ** '.cập nhật ({query}, {update}, {options}) '** trong khi **' save' ** chỉ chấp nhận một đối số. – chridam

Trả lời

9

update thay đổi tài liệu hiện có được tìm thấy bởi tham số của bạn và không làm gì khi không có tài liệu như vậy (trừ khi bạn sử dụng tùy chọn upsert).

save không cho phép bất kỳ find-thông số. Nó kiểm tra nếu có một tài liệu với cùng một _id là một trong những bạn lưu tồn tại. Khi nó tồn tại, nó sẽ thay thế nó. Khi không có tài liệu như vậy tồn tại, nó chèn tài liệu như một tài liệu mới. Khi tài liệu bạn chèn không có trường _id, nó tạo ra một với một ObjectId mới được tạo ra trước khi chèn.

collection.save(document); về cơ bản là một cách viết tắt cho:

if (document._id == undefined) { 
    document._id = new ObjectId(); 
} 
collection.update({ "_id":document._id }, document, { upsert:true }); 
1

Từ các tài liệu:

Save command.

Các save() phương pháp sử dụng hoặc chèn hoặc lệnh cập nhật, mà sử dụng mối quan tâm viết mặc định. Để xác định một mối quan tâm khác nhau ghi, bao gồm mối quan tâm ghi trong tham số tùy chọn.

Nếu tài liệu không chứa trường _id, thì phương thức save() gọi phương thức insert().

Nếu tài liệu có chứa một lĩnh vực _id, sau đó phương pháp tiết kiệm() là tương đương với một bản cập nhật với tùy chọn upsert thiết lập là true và vị truy vấn trên các lĩnh vực _id.

Update command

nếu upsert không được chỉ định nó

Sửa đổi một tài liệu hiện có hoặc tài liệu trong một bộ sưu tập. Phương pháp có thể sửa đổi các lĩnh vực cụ thể của một tài liệu hiện có hoặc tài liệu hoặc thay thế một tài liệu hiện hoàn toàn, tùy thuộc vào bản cập nhật tham số.

Nếu upsert là đúng và không có tài liệu nào phù hợp với tiêu chí truy vấn, hãy cập nhật() chèn một tài liệu.


Vì vậy, họ đều khá giống nhau và cả hai có thể cập nhật và chèn vào tài liệu. Sự khác biệt là lưu chỉ có thể cập nhật một tài liệu.

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