2016-01-09 112 views
1

如何向此结构中的每个数组元素添加唯一ID?元素的数量是可变的,所以我需要一个动态的解决方案。MongoDB/Meteor:为每个数组元素添加唯一ID

{ 
    "_id" : "wLXDvjDvbsxzfxabR", 
    "group" : [ 
     { 
      "title" : "title 1", 
      "data" : [ 
       { 
        "note" : "text" 
       } 
      ] 
     }, 
     { 
      "title" : "title 2", 
      "data" : [ 
       { 
        "note 1" : "text" 
       }, 
       { 
        "note 2" : "text" 
       }, 
       { 
        "note 3" : "text" 
       } 
      ] 
     } 
    ] 
} 

该ID应添加到所有组元素和所有数据元素。结果应该是这样的:

{ 
    "_id" : "wLXDvjDvbsxzfxabR", 
    "group" : [ 
     { 
      "id" : "dfDFSfdsFDSfdsFws", 
      "title" : "title 1", 
      "data" : [ 
       { 
        "id" : "efBDEWVvfdvsvsdvs", 
        "note" : "text" 
       } 
      ] 
     }, 
     { 
      "id" : "fdsfsFDSFdsfFdsFd", 
      "title" : "title 2", 
      "data" : [ 
       { 
        "id" : "WVvfsvVFSDWVDSVsv", 
        "note 1" : "text" 
       }, 
       { 
        "id" : "qqdWSdksFVfSVSSCD", 
        "note 2" : "text" 
       }, 
       { 
        "id" : "MZgsdgtscdvdsRsds", 
        "note 3" : "text" 
       } 
      ] 
     } 
    ] 
} 
+0

你试过只是通过'group'阵列循环,分配'id'值到每个元素? – sfletche

回答

2

这应该通过对象迭代

function generateId() { 
    // you'll have to write this yourself 
} 

function addId(obj) { 
    if (Object.prototype.toString.call(obj).indexOf('Array') >= 0) { 
     obj.forEach(function(item) { 
      item.id = item.id || generateId(); 
      addId(item); 
     }); 
    } 
    else if (typeof obj == 'object') { 
     Object.keys(obj).forEach(function(key) { 
      addId(obj[key]); 
     }); 
    } 
} 

使用

addId(yourObject); 
+0

我猜'genid()'应该是'generateId()',对不对? – user3142695

+0

绝对不是......'genid'是'addId'函数中的参数名称 - 你可以在不引用'genid'的情况下执行它(在参数中删除它)并在addId函数中使用generateId - 但是,我写了这与考虑到灵活性...我会更简单地重写它 –

+0

那里 - 更简单,更容易混淆 –

相关问题