Tôi googled và tất cả những người khác, nhưng tôi đã không tìm thấy câu trả lời. Câu hỏi là:Chèn/cập nhật hàng loạt bằng Mongoid?
Xin chào, làm thế nào tôi có thể thực hiện chèn hàng loạt với Mongoid đến MongoDB?
Tôi googled và tất cả những người khác, nhưng tôi đã không tìm thấy câu trả lời. Câu hỏi là:Chèn/cập nhật hàng loạt bằng Mongoid?
Xin chào, làm thế nào tôi có thể thực hiện chèn hàng loạt với Mongoid đến MongoDB?
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)
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)
Không bỏ qua xác thực – Viren
Tôi nhận được lỗi này phương thức undefined 'as_document 'cho #
@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
Phương thức Model.create
của Mongoid có thể chấp nhận một mảng để tạo tài liệu.
Từ các tài liệu Mongoid:
Person.create([
{ first_name: "Heinrich", last_name: "Heine" },
{ first_name: "Willy", last_name: "Brandt" }
])
https://docs.mongodb.org/ecosystem/tutorial/mongoid-persistence/
Điều đó vẫn tạo ra từng cái một :( – unflores
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
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
Tôi đang nhận NoMethodError: phương thức chưa xác định 'insert ' – tomascharad
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