2016-05-11 30 views
1

我有以下蒙戈子文档MongoDB的更新查询设置现有字段到数组

 

"location" : { 
     "zipCode" : "90670", 
     "lat" : "33.942669", 
     "lng" : "-118.074384", 
     "city" : "Santa Fe Springs", 
     "state" : "California", 
     "streetAddress" : "12131 Telegraph Road, 2nd Floor", 
    } 

有人建议我MONGO更新查询或节点功能得到以下文件

 

"location" : { 
     "zipCode" : "90670", 
     "city" : "Santa Fe Springs", 
     "state" : "California", 
     "streetAddress" : "12131 Telegraph Road, 2nd Floor", 
     "geo" : { 
      "type" : "Point", 
      "coordinates" : [ 33.942669 ,-118.074384 ] 
     } 
    } 

回答

0

如果使用Node.js的MongoDB的驱动,你可以这样做:

var firstQuery = { 


"zipCode" : "90670", 
    "city" : "Santa Fe Springs", 
    "state" : "California", 
    "streetAddress" : "12131 Telegraph Road, 2nd Floor" 
}; 

db.collection('yourCollection').find(firstQuery).toArray(function(err, results) { 
    if (err) return err; 
    results.forEach(function(record) { 
     var geo = { 
      "type" : "Point", 
     "coordinates" : [ record.lat ,record.lng ] 
     }; 

     var newRecord = { 
      zipCode: record.zipCode, 
      city: record.city, 
      state: record.state, 
      streetAddress: record.streetAddres, 
      geo: geo 
     }; 

     db.collection('yourCollection').update(record, newRecord, function(err) { 
      if(err) { 
       //do whatever you want with this 
      } 
     }); 
    }); 
}); 
+0

甚至你可以这样做db.collection.update({x:1},{$取消设置:{X: '',y:''},$ set:{point:{x:1,y:2}}})。 – LuisFMorales

0

可以做类似的事:

var query = { 
    "zipCode" : "90670", 
    "city" : "Santa Fe Springs", 
    "state" : "California", 
    "streetAddress" : "12131 Telegraph Road, 2nd Floor" 
}; 

var operator = { 
    $unset: { 
    "lat" : "", 
    "lng" : "" 
    }, 
    $set: { 
     "geo" : { 
     "type" : "Point", 
     "coordinates" : [ 33.942669 ,-118.074384 ] 
     } 
    }  
}; 

var options = { 
    multi: true 
} 

db.yourCollection.update(query, operator, options); 

这将影响所有与查询indee匹配的记录d。

0

此更改不能在单个操作中完成。您需要先获取需要更改的文档,然后使用新格式更新文档。