即使添加了唯一密钥,MongoDB也会复制文档

我创建了一个集合并添加了一个像这样的唯一键


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驱动程序插入具有相同uid和sid的文档,并且该文档正在被插入。


我想要的是


在Mongo Shell上:在uid和sid上添加唯一键,没有重复的文件使用相同的uid和sid。

在PHP方面:具有类似mysql “在重复键更新速率= rate + 1上插入(值)”之类的内容。就是说,每当我尝试插入文档时,如果没有插入,都应插入它,否则它将更新文档的费率字段


手掌心
浏览 585回答 2
2回答

qq_笑_17

我觉得对于这种基本的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 }});});
打开App,查看更多内容
随时随地看视频慕课网APP