我創(chuàng)建了一個(gè)集合并添加了一個(gè)像這樣的唯一鍵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ū)動(dòng)程序插入具有相同uid和sid的文檔,并且該文檔正在被插入。我想要的是在Mongo Shell上:在uid和sid上添加唯一鍵,沒有重復(fù)的文件使用相同的uid和sid。在PHP方面:具有類似mysql “在重復(fù)鍵更新速率= rate + 1上插入(值)”之類的內(nèi)容。就是說,每當(dāng)我嘗試插入文檔時(shí),如果沒有插入,都應(yīng)插入它,否則它將更新文檔的費(fèi)率字段
2 回答

qq_笑_17
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
我覺得對于這種基本的MongoDB操作,當(dāng)前最流行的答案有點(diǎn)過于本地化和過于詳細(xì)-通過鍵從mongo中刪除重復(fù)項(xiàng)。
通過mongo> 3.0的鍵刪除重復(fù)項(xiàng)很簡單。只需運(yùn)行此查詢,替換yourDuplicateKey并假設(shè)_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 關(guān)注
- 643 瀏覽
添加回答
舉報(bào)
0/150
提交
取消