2012-07-28 38 views
2

一段時間沒有更改我的代碼,並且它工作正常。但是從昨天開始,我發現我無法通過mongoid將我的新記錄保存到mongod db。無法使用mongoid和MongoDB將新記錄保存到我的導軌模型

背景:

gem 'rails', '3.2.5' 
gem 'mongo', "1.6.2" 
gem "mongoid", "2.4.7" 

蒙戈服務器版本: DB版本V2.0.5,pdfile 4.5版 MongoDB的外殼版本:2.0.5

軌道模型和數據規模(仍處於發展模式) : 3個模型(用戶:164K,關係:122M,狀態:370K)

問題:無法保存新用戶記錄,如此處顯示的那樣,即使它通過了限制(就像我有唯一的uid,id _STR)。作爲操作是如此之快

可能是什麼造成不節能的問題的原因在mongodb.log文件

MONGODB (0ms) blog_development['$cmd'].find({"count"=>"users", "query"=>{}, "fields"=>nil}).limit(-1) 
MONGODB (0ms) blog_development['users'].insert([{"_id"=>BSON::ObjectId('501452f346b0a14fb5000001'), "uid"=>1001, "id_str"=>"1001", "updated_at"=>2012-07-28 21:00:39 UTC, "created_at"=>2012-07-28 21:00:39 UTC}]) 
MONGODB (0ms) blog_development['$cmd'].find({"count"=>"users", "query"=>{}, "fields"=>nil}).limit(-1) 
MONGODB (0ms) blog_development['$cmd'].find({"count"=>"users", "query"=>{}, "fields"=>nil}).limit(-1) 

沒有:

[2] pry(main)> User.count 
=> 164325 
[3] pry(main)> u=User.new(uid: 1001, id_str: "1001") 
=> #<User _id: 501452f346b0a14fb5000001, _type: nil, created_at: nil, updated_at: nil, uid: 1001, id_str: "1001", name: nil, screen_name: nil, location: nil> 
[4] pry(main)> u.save 
=> true 
[5] pry(main)> User.count 
=> 164325 
[6] pry(main)> u.save! 
=> true 
[7] pry(main)> User.count 
=> 164325 

Rails日誌文件?

更新:在蒙戈外殼 我的數據庫狀態:

"ns" : "blog_development.users", 
    "count" : 164325, 
    "size" : 159656080, 
    "avgObjSize" : 971.5872813022972, 
    "storageSize" : 177336320, 
    "numExtents" : 14, 
    "nindexes" : 3, 
    "lastExtentSize" : 36089856, 
    "paddingFactor" : 1.0099999999963194, 
    "flags" : 1, 
    "totalIndexSize" : 22729280, 
    "indexSizes" : { 
     "_id_" : 9598624, 
     "uid_1" : 6091120, 
     "screen_name_1" : 7039536 
    }, 
    "ok" : 1 

OS是:2.6.38-8-通用#42 Ubuntu的SMP週一4月11日3點31分24秒UTC 2011 x86_64的x86_64的x86_64的GNU/Linux

+0

db.users.stats()的DB shell輸出是什麼樣的?你用什麼O/S?在問題中更新了 – Stennie 2012-07-28 21:56:28

+0

。在我的數據庫似乎很好。 – 2012-07-28 22:50:09

+0

只是嘗試使用創建,它能夠保存到分貝。我無法得到soln :( – Bijendra 2012-07-29 11:16:58

回答

4

您使用的是「upsert」語義之後的save方法。如果存在符合條件的現有文檔((uid: 1001, id_str: "1001")),它將被更新而不是插入新文檔。

u=User.new(uid: 1001, id_str: "1001") 

u.save 
=> true 

既然你居然打算創建一個新的文件,你應該使用insert

u.insert 

或者,你也可以讓你的類的定製_id並指定該上創造。您需要override Mongoid's _id field這是默認只讀。

+0

其實,我的數據庫裏有一個重複的記錄,以後再找出來,所以你是對的,應該區分「保存」和「插入」。 。 – 2012-08-27 14:54:07

相關問題