【问题标题】:How to transfer duplicates document from one collection to another in mongodb如何在mongodb中将重复文档从一个集合传输到另一个集合
【发布时间】:2018-01-25 07:01:44
【问题描述】:

我正在使用聚合查找重复文档,然后我想移动 这些重复的文档到另一个集合中。但我不知道如何 去做 。我尝试了很多方法,但在 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 集合中保留其他重复文档。

【问题讨论】:

  • 你能告诉我们你尝试了什么吗?
  • 您也可以发布架构吗?什么是重复?您要从文档中删除什么?
  • 我已经上传了代码,你能建议我如何进行吗?

标签: mongodb


【解决方案1】:

好的,下面是可能的解决方案

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++
    }
  })
})

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

【讨论】:

    【解决方案2】:

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

    但假设这些操作返回Promises,您可以将代码更改为类似的内容。

    使用 ES2017 async/await 语法

    async function foo() {
        var outCursor = await db.Working_newFooditem.find({}).toArray()
        var inCursor = await db.Working_newFooditem.find({}).toArray()
    
        for (var out_c of outCursor) {
            var outUniqueString = out_c.uniqueName
            for (var in_c of inCursor) {
                var inUniqueString = in_c.uniqueName
                if (in_c === out_c) {
                    await db.dupC.insert(in_c)
                    await db.Working_newFooditem.remove(in_c._id)
                }
            }
        }
        return 'good job'
    }
    
    foo()
    .then(msg => console.log(msg))
    .catch(e => console.log(e))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 2016-09-22
      • 2020-09-12
      • 1970-01-01
      相关资源
      最近更新 更多