我創(chuàng)建了一個集合并添加了一個像這樣的唯一鍵db.user_services.createIndex({"uid":1 , "sid": 1},{unique:true,dropDups: true})該集合看起來像這樣的“ user_services”{ "_id" : ObjectId("55068b35f791c7f81000002d"), "uid" : 15, "sid" : 1, "rate" : 5},{ "_id" : ObjectId("55068b35f791c7f81000002f"), "uid" : 15, "sid" : 1, "rate" : 4}問題:我正在使用php驅(qū)動程序插入具有相同uid和sid的文檔,并且該文檔正在被插入。我想要的是在Mongo Shell上:在uid和sid上添加唯一鍵,沒有重復的文件使用相同的uid和sid。在PHP方面:具有類似mysql “在重復鍵更新速率= rate + 1上插入(值)”之類的內(nèi)容。就是說,每當我嘗試插入文檔時,如果沒有插入,都應插入它,否則它將更新文檔的費率字段
2 回答

qq_笑_17
TA貢獻1818條經(jīng)驗 獲得超7個贊
我覺得對于這種基本的MongoDB操作,當前最流行的答案有點過于本地化和過于詳細-通過鍵從mongo中刪除重復項。
通過mongo> 3.0的鍵刪除重復項很簡單。只需運行此查詢,替換yourDuplicateKey并假設_id您是主鍵(請確保您mongodump以防萬一):
db.yourCollection.aggregate([
{ "$group": {
"_id": { "yourDuplicateKey": "$yourDuplicateKey" },
"dups": { "$push": "$_id" },
"count": { "$sum": 1 }
}},
{ "$match": { "count": { "$gt": 1 } }}
]).forEach(function(doc) {
doc.dups.shift();
db.yourCollection.remove({ "_id": {"$in": doc.dups }});
});
- 2 回答
- 0 關注
- 651 瀏覽
添加回答
舉報
0/150
提交
取消