2010-09-22 48 views

Trả lời

53

Bạn có thể chèn một mảng hàng loạt các băm bằng phương pháp chèn của trình điều khiển ruby ​​mongo. Từ bất kỳ lớp Mongoid nào, bạn có thể gọi bộ sưu tập để truy cập nó.

batch = [{:name => "mongodb"}, {:name => "mongoid"}] 
Article.collection.insert(batch) 
+5

Một điểm rất quan trọng cần nhớ là bằng cách này, bạn đang bỏ qua các tùy chọn mongoid.yml. Vì vậy, nếu bạn sử dụng nó, hãy đảm bảo thông báo cho họ nếu bạn cần, ví dụ: Article.with (safe: true) .collection.insert (batch) – bakkay

+0

Tôi đang nhận NoMethodError: phương thức chưa xác định 'insert ' – tomascharad

+0

Tôi cũng thế. Khi được hỏi một câu hỏi về nó http://stackoverflow.com/questions/33894132/mongocollection-undefined-method-insert – Mika

25

Nếu bạn muốn chèn hàng loạt các văn bản Mongoid (mô hình) thay vì băm, gọi phương thức as_document của mô hình của bạn trước khi đặt nó vào mảng:

@page_views << page_view.as_document 

...

PageView.collection.insert(@page_views) 
+8

Không bỏ qua xác thực – Viren

+1

Tôi nhận được lỗi này phương thức undefined 'as_document 'cho # bất kỳ giải pháp nào? –

+0

@AbhayKumar 'as_document' không hoạt động đối với mảng, chỉ các đối tượng đơn lẻ. Nếu bạn đã có một mảng các đối tượng, bạn có thể gọi nó như sau: 'PageView.collection.insert (@ page_views.map (&: as_document))' sẽ ánh xạ tất cả các đối tượng vào các tài liệu trước khi chèn. – Jay

3

Bạn có thể sử dụng này:

books = [{:name => "Harry Potter"}, {:name => "Night"}] 
Book.collection.insert_many(books) 

Và tôi thấy rằng "chèn" không làm việc cho tôi (Monogoid 5.1.3):

NoMethodError: undefined method `insert' for # <Mongo::Collection:0x007fbdbc9b1cd0> 
Did you mean? insert_one 
       insert_many 
       inspect 

Đây là mã nguồn từ "lib/mongo/collection.rb":

# Insert the provided documents into the collection. 
# 
# @example Insert documents into the collection. 
# collection.insert_many([{ name: 'test' }]) 
# 
# @param [ Array<Hash> ] documents The documents to insert. 
# @param [ Hash ] options The insert options. 
# 
# @return [ Result ] The database response wrapper. 
# 
# @since 2.0.0 
def insert_many(documents, options = {}) 
    inserts = documents.map{ |doc| { :insert_one => doc }} 
    bulk_write(inserts, options) 
end 
Các vấn đề liên quan