我的收藏品上有以下索引:
{
"v" : 1,
"key" : {
"story_feed_id" : 1,
"story_guid" : 1
},
"unique" : true,
"ns" : "newsblur.stories",
"name" : "story_feed_id_1_story_guid_1",
"background" : false,
"dropDups" : false
},
并希望它将dropDups更新为true
这样做的最佳方式是什么?
答案 0 :(得分:3)
没有有效的用例需要启用该标志。如果在该集合中存在索引键的重复项,那么将导致帖子中的索引定义的createIndex / ensureIndex调用将失败:
> db.test.save({a:1})
> db.test.save({a:1})
> db.test.ensureIndex({a:1}, {unique:true})
E11000 duplicate key error index: test.test.$a_1 dup key: { : 1.0 }
换句话说,不存在需要追溯启用该标志的情况。标志存在的唯一原因是为具有重复索引键值的集合的createIndex调用删除重复项,并且您希望删除它们而不是因上述错误而导致调用失败。
答案 1 :(得分:0)
如果你不能删除只需删除下一个代码(Node.js)的重复项
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/videossite';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
console.log("Connected correctly to server");
var collection = db.collection("video");
collection.aggregate([
{ $group: {
// Group by fields to match on (a,b)
_id: { videoId: "$videoId" },
// Count number of matching docs for the group
count: { $sum: 1 },
// Save the _id for matching docs
docs: { $push: "$_id" }
}},
// Limit results to duplicates (more than 1 match)
{ $match: {
count: { $gt : 1 }
}}
],function(err,result){
for(var i = 0 ; i < result.length ; i++){
collection.remove({videoId:result[i]._id.videoId},function(err, result) {
console.log("result",result.result.n)
});
}
});
});
&#13;