2013-10-06 2 views
1

У меня есть документ в базе данных следующим образом.переименовать поле во встроенной матрице mongodb

{                
"CorePrice" : 1,          
"_id" : 166,           
"partno" : 76,           
"parttype" : "qpnm",         
"shipping" : [{                  
    "shippingMethod1" : "ground",       
    "cost1" : "10" 
     },              
    {      
      "shippingMethod2" : "air",        
     "cost2" : "11"         
    },              
    {                
    "shippingMethod3" : "USPS",        
    "cost3" : "3"         
    },              
    {                
    "shippingMethod4" : "USPS",        
    "cost4" : 45         
    }] 
} 

Я пытаюсь переименовать ShippingMethod4 в shippingMethod, итерируя, используя следующий код.

remap = function (x)  
{ 
    if (x.shipping) { 
     db.foo.update ({ _id:x._id}, 
       { $set: {  
        "shipping.shippingMethod","x.shipping.shippingMethod4" },  
       $unset:{ "shipping.shippingMethod4":1  
     }}); } } 

Однако он бросает мне следующую ошибку:

"Sun Oct 06 02:09:44.764 JavaScript execution failed: SyntaxError: Unexpected token ,                    

Не уверен, почему. Кто-то может помочь?

+0

Вы не можете ссылаться на одно поле и «тянуть» содержимое и хранить его в другом поле. Я бы предположил, что, поскольку это одноразовое исправление, просто возьмите весь документ, сделайте исправления и обновите документ. – WiredPrairie

+0

После $ set у вас есть «,» после «shipping.shippingMethod». Это должно быть «:» ;-). Однако это не решит вашу проблему, потому что у вас все еще есть ошибки. – Moreno

ответ

0

Я переписал эту функцию для вас.

rename=function(x) { 
    if (x.shipping) { 
        x.shipping[3]={                
        "shippingMethod" : "USPS",        
        "cost4" : 45         
        } 
    } 
    db.foo.update({_id:x._id},x) 
} 

Это сделающее обновление вам необходимо. Конечно, для общего случая вам все равно придется добавить цикл для итерации через массив доставки, чтобы найти нужное имя и сохранить индекс, чтобы использовать его так же, как я, но я дал вам это как упражнение ;-). Вы называете это переименованием (x) из оболочки.

Надеюсь, что это поможет, Moreno.

Смежные вопросы