如何将arrayIndex位置添加到版本3.0.4的mongo db中的unwinded文档

时间:2016-07-14 06:17:47

标签: java mongodb aggregation-framework

有聚合:

{
  $unwind:
    {
      path: <field path>,
      includeArrayIndex: <string>,
      preserveNullAndEmptyArrays: <boolean>
    }
}

目前,我正在使用这个&#34; $ unwind&#34;在mongodb版本3.2中的概念。它工作正常。但在制作中我有mongodb 3.0.4版。如何在3.0.4版本中使用此概念?

任何人都可以帮我解决这个问题...

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决它。

  1. 升级: - )
  2. 更改文档结构以添加position值 - 它将作为一种entryID字段 - 请参阅下面的代码段:
  3. 更改forEach循环中的documnet结构:

      db.dev777_copy.find({}).forEach(function (doc) {
        var empArraySize = doc.employees.length;
    
        for (var i = 0; i < empArraySize; i++) {
            var innerArraySize = doc.employees[i].Salary.length;
    
            for (var j = 0; j < innerArraySize; j++) {
                doc.employees[i].Salary[j] = {
                    position : NumberInt(j),
                    value : doc.employees[i].Salary[j]
                };
            }
    
        }
        db.dev777_copy.save(doc);
    })
    

    然后我们的文档会有新的形状:

    {
        "_id" : ObjectId("57862763a63c006944fb508b"),
        "employees" : [{
                "empId" : 100.0,
                "Salary" : [{
                        "position" : 0,
                        "value" : 1000.0
                    }, {
                        "position" : 1,
                        "value" : 2000.0
                    }, {
                        "position" : 2,
                        "value" : 3000.0
                    }
                ]
            }, {
                "empId" : 101.0,
                "Salary" : [{
                        "position" : 0,
                        "value" : 3000.0
                    }, {
                        "position" : 1,
                        "value" : 4000.0
                    }, {
                        "position" : 2,
                        "value" : 500.0
                    }
                ]
            }
        ]
    }