在MongoDB 中建立集合並使用createIndex({"uid":1 , "sid": 1 新增唯一索引時},{unique:true,dropDups: true}),儘管有唯一鍵約束,但可能仍會插入重複文件。
在檢查索引建立時,可能會遇到指示「重複鍵錯誤」的錯誤訊息。這是因為 MongoDB 3.0.0 有一個 bug,當存在重複項時,無法建立索引。
要解決此問題,請先使用聚合查詢和 $match 運算子刪除重複記錄。
<code class="javascript">db.events.aggregate([ { "$group": { "_id": { "uid": "$uid", "sid": "$sid" }, "dups": { "$push": "$_id" }, "count": { "$sum": 1 } }}, { "$match": { "count": { "$gt": 1 } }} ]).forEach(function(doc) { doc.dups.shift(); db.events.remove({ "_id": {"$in": doc.dups }}); });</code>
刪除重複項後,可以建立唯一索引而不會遇到錯誤。
要插入尚不存在的文檔或更新現有文檔,請使用 update() 方法,並將 upsert 選項設為 true。
<code class="php">$collection->update( array( "uid" => 1, "sid" => 1 ), array( '$set' => $someData ), array( 'upsert' => true ) );</code>
如果文檔不存在,這將插入文檔,否則它將透過設定 $set 數組中指定的欄位來更新文檔。
以上是儘管有唯一索引,為什麼我仍然在 MongoDB 中看到重複文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!