如何在mongodb中将重复文档从一个集合传输到另一个集合

时间:2018-01-18 04:15:02

标签: mongodb

我正在使用聚合找到重复文档,然后我想移动 这些重复的文件进入另一个集合但我不知道怎么做 去做 。我尝试了许多方法,但无法在mongodb中完成。

outCursor = db.Working_newFooditem.find({}).toArray()
var length = outCursor.length
var i = 0;
var j = 0;
inCursor = db.Working_newFooditem.find({}).toArray()
while (j<=length) {
        var outUniqueString = outCursor[j].uniqueName;
        while (i<= length) {
            var inUniqueString = inCursor[i].uniqueName;
            if(inUniqueString === outUniqueString){
                db.dupC.insert(inCursor[i])
                db.Working_newFooditem.remove(inCursor[i]._id)
            }i++
    }j++
}

我有重复文档,所以我通过连接其他文档字段来创建uniqueName字段,但是这个uniqueName可能重复两次,因为集合中存在相同的文档,所以我试图找到重复uniqueName的文档然后想要将一个文档保存在testTemp集合中,并在abc集合中保留其他重复文档。

2 个答案:

答案 0 :(得分:0)

好的,所以这里有可能的解决方案

db.Working_newFooditem.find({}).toArray((err, outCursor) => {
  db.Working_newFooditem.find({}).toArray((err, inCursor) => {
    var length = outCursor.length
    var i = 0;
    var j = 0;
    while (j<=length) {
            var outUniqueString = outCursor[j].uniqueName;
            while (i<= length) {
                var inUniqueString = inCursor[i].uniqueName;
                if(inUniqueString === outUniqueString){
                    db.dupC.insert(inCursor[i])
                    db.Working_newFooditem.remove(inCursor[i]._id)
                }i++
        }j++
    }
  })
})

要获取数据 - 您应该为每个查找查询实现回调函数,您也应该将它们嵌套。

答案 1 :(得分:0)

我已经看到你的代码有mongoDB操作,但你没有回调也没有承诺,这是错误的

但假设这些操作返回my @data = (1..8, 25, 37); my $fixed_length = 5; # number of points to always go into array my ($v1, $v2, $v3, @ary) = splice @data, 0, 3+$fixed_length; # (25 and 37 remain) The section above needs no changes in future while (my $datum = shift @data) { # deal with data that grows in time } ,您可以更改类似的代码。

  

使用ES2017 Promises语法

async/await