我有1000个用户,我将从Twitter检索,我想一次性保存它们,而不是单独进行1000次插入。
我怎样才能在Mongoid上做到这一点?这样的事情会摇滚:
TwitterUser.createMany([{:name=>u1}, {:name=>u2},{:name=>u3}] )
答案 0 :(得分:7)
您应该使用Mongo ruby驱动程序来执行此操作。您可以将一组哈希值传递给insert
method以一次创建多个文档(有关此google groups discussion的更多信息)。 Mongoid可以轻松访问ruby驱动程序。
代码看起来像这样:
user_list = twitter_accounts.map do |account|
# create a hash of all the fields to be stored in each document
{ 'name' => account.name,
'username' => account.username
# some other fields...
}
end
Mongoid.master['twitter_users'].insert(user_list)
答案 1 :(得分:1)
你几乎得到了它,create
,而不是createMany
。您可以像这样使用它:
TwitterUser.create([
{ username: "u1", display_name: "Display Name 1" },
{ username: "u2", display_name: "Display Name 2" },
{ username: "u3", display_name: "Display Name 3" }
])
此外,正如@bowsersenior指出的那样,将它与Array#Map
一起使用是个好主意:
TwitterUser.create(
@users_array.map do |u|
{ username: u.username, display_name: u.name }
end
)
来自Mongoid#Persistence
文档:
将文档或多个文档插入数据库
将文档或多个文档插入数据库,如果发生验证错误则引发错误。
答案 2 :(得分:0)
直接使用MongoidModel.create。