我创建了一个集合并添加了一个像这样的唯一键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上插入(值)”之类的内容。就是说,每当我尝试插入文档时,如果没有插入,都应插入它,否则它将更新文档的费率字段
2 回答
qq_笑_17
TA贡献1818条经验 获得超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 关注
- 620 浏览
添加回答
举报
0/150
提交
取消