2015-11-15 60 views
0

後db.collection.find返回多個記錄(添加UpdatedData):我用<code>addToSet</code>命令addToSet

MyTable.update({ "UrlLink": "http://www.someurl.com"}, { 
     $addToSet: { 
      UpdatedData: { 
       TheDate: ThisDate, 
       NewInfo: ThisInfo 
      } 
     } 
    }, 
     function (err, result) { 
       next(err,result) 
     } 
); 

但後來,當我做了查詢(UpdatedData添加到我的文檔之後),我看到它返回兩個文件。取而代之的只有一個更新document

db.MyTable.find({"UrlLink": "http://www.someurl.com"}) 

{ "_id" : ObjectId("56485922143a886f66c2f8bb"), "UrlLink" : "http://www.someurl.com", "Stuff" : "One", "UpdatedData" : [ { "TheDate" : "11/15/2015", "NewInfo" : "Info1", "_id" : ObjectId("5648599a71efc79c660f76d3") } ] } 
{ "_id" : ObjectId("5648599f71efc79c660f76d4"), "UrlLink" : "http://www.someurl.com", "Stuff": "One", "UpdatedData" : [ ] } 

如此看來,addToSet創造,而不是更新舊記錄(ObjectId("5648599f71efc79c660f76d4"))與新_id一個新的文檔。但我只看到robomongoObjectId("56485922143a886f66c2f8bb"))中的更新文檔。任何想法爲什麼會發生這種情況,以及我如何防止這種行爲?

回答

1

update無法創建新文檔,它只能存在update。 這看起來像你已經創建了兩個文件具有相同的URL。然後,當你更新,它只是更新的第一個..

爲了防止文檔的創建與已經存在的網址,你可以創建一個索引,並設置它獨特的

db.collection.createIndex({ UrlLink: 1 }, { unique: true })

這將防止與相同的URL新文檔的創建,也將UrlLink使查詢儘可能快。

+0

好吧,但我只看到更新的robomongo,奇怪的是,查詢返回兩個文件? – user1665355

+0

@ user1665355您正在使用哪個mongodb驅動程序?哪個mongodb版本? – webdeb

+0

3.0版本。我會嘗試你的解決方案 – user1665355