2012-12-24 43 views
9

Tôi bắt đầu với Meteor và cần trợ giúp với Mongo. Tôi có một bộ sưu tập các tên mà tôi đang hiển thị trên một danh sách và muốn có thể cập nhật một biến các mục nhập nhất định trong cơ sở dữ liệu dựa trên các tiêu chí khác. Về cơ bản những gì tôi muốn làm là:Meteor/Mongo: Tìm và cập nhật các yếu tố nhất định trong bộ sưu tập

Đối với mỗi mục nhập có đặc tính A = true và B = true, thay đổi đặc tính C thành sai. Cho đến nay, tôi đã cố gắng tìm hiểu cách Mongo có thể xử lý vòng lặp "cho mỗi" trên các phần tử của bộ sưu tập, và cho mỗi phần tử kiểm tra xem điều kiện A và B có giữ, và sau đó collection.update (phần tử, {C: false}). Điều này chứng minh là có nhiều vấn đề hơn tôi nghĩ. Tôi muốn làm một cái gì đó như thế này (sử dụng tên biến dummy):

for (i = 0; i < collection.find().count(); i++){ 
    if (collection[i].A===true && collection[i].B===true) 
     collection.update(collection[i], {$set: {C: false}}); 
}; 

Tôi đã thay đổi mã cơ sở này xung quanh, nhưng tôi bắt đầu cảm nhận được rằng tôi đang thiếu một cái gì đó cơ bản về lập chỉ mục/bao bộ sưu tập làm việc trong Mongo. Bạn có thể lập chỉ mục một bộ sưu tập như thế này (và nếu vậy, đây có phải là cách thuận tiện nhất để làm những gì tôi đang cố gắng làm không?)?

Trả lời

14

Tất nhiên tôi tìm ra cách thực hiện điều này ngay sau khi đăng, và tất nhiên nó được đề xuất trong tài liệu Meteor!

Và, tất nhiên, đó là một giải pháp đơn giản:

collection.update({A: true, B: true}, {$set: {C:false}}); 
+2

Bạn có thể chấp nhận câu trả lời của riêng mình :-) – Rahul

+1

Chỉ hoạt động với tài liệu đầu tiên phù hợp với công cụ chọn. Bạn cần. collection.update ({A: true, B: true}, {$ set: {C: false}}, 0,1); cho tất cả các hàng. –

+2

@DavidWihl để chỉnh sửa nhiều hàng bạn cần đặt {multi: true} làm thông số thứ ba thay vì 0,1 (xem tài liệu sao băng, http://docs.meteor.com/#update). vì vậy đó sẽ là: collection.update ({A: true, B: true}, {$ set: {C: false}}, {multi: true}) –

9

Như đã đề xuất trong các ý kiến, câu trả lời đúng là:

collection.update({A: true, B: true}, {$set: {C:false}}, {multi: true}); 

(Ít nhất là trong tinh khiết MongoDB, see there).

Nếu không có multi: true, nó sẽ chỉ thay đổi một tài liệu phù hợp với tiêu chí.

Trong Meteor, bạn không được phép thực hiện cập nhật phía máy khách hơn là khớp với nó (vì vậy không có khả năng cho các tiêu chí khác nhau, không có khả năng cho multi), xem http://docs.meteor.com/#update.

Bạn có thể lặp qua tất cả các tìm kiếm, nhưng tốt hơn nên chạy phía máy chủ mã như vậy.

+0

'multi: true' hiện được hỗ trợ bởi Meteor: http://docs.meteor.com/#/full/update –

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