2016-03-05 91 views
-2

如何更新MongoDb中的數組?如何更新MongoDb中的數組值?

這是我的shell腳本我想用這個腳本更新fileInfo某些產品有fileInfo存在,有些產品有 fileInfo不存在。

所以我requrement是如果的fileInfo存在,將更新,如果不存在的fileInfo它會創建

什麼修改將採取我的代碼?三江源

{ 
    "_id" : ObjectId("56d460721cdb5a4b0a73d4ba"), 
    "catId" : "56d4558b1cdb5a4b0a73d03b", 
    "pname" : "ABCName", 
    "brand" : "ABCBrand", 
    "actualPrice" : "19", 
    "offer" : 0, 
    "shopId" : "56d312a61cdb5a1a2d8045", 
    "mProId" : "569e04ecd08598371ebe53eb", 
    "del" : "N", 
    "createdOn" : "28-Feb-2016 19:29:29 UTC" 
} 

添加數據這一項中的每個文件

"fileInfo" : [ 
     { 
      "versionId" : "BHpKOLlsgIRF7JqcBrKLPDFC5OgUAUEp", 
      "fileKey" : "productFile/abc.jpg" 
     } 
    ], 

這是我的shell腳本代碼

var product = currentDb.getCollection("product"); 

var shop_id = "56d312a61cdb5a1a2d8045"; 

var mproductData = mproduct.find(); 
var productData = product.find({shopId:shop_id}); 
var productData1 = product.find({shopId:shop_id}).count(); 

var count=0; 
var mcount=0; 
for(var i=0;i<mproductData.length();i++) 
{ 
    mcount++ 
    for(var j=0;j<productData.length();j++) 
    { 

    if(mproductData[i]._id==productData[j].mProId) 
    {    
      count++; 
      var mpro_id = mproductData[i]._id; 
      var mfile_version = mproductData[i].fileInfo[0].versionId; 
     var mfile_key = mproductData[i].fileInfo[0].fileKey;  
     print(mpro_id); 
     print(mfile_info); 
     print(mfile_key); 
      if(mproductData[i]._id==productData[j].mProId) 
    {    
      count++; 
      var mpro_id = mproductData[i]._id; 
      var mfile_version = mproductData[i].fileInfo[0].versionId; 
     var mfile_key = mproductData[i].fileInfo[0].fileKey;  
     print(mpro_id); 
     print(mfile_info); 
     print(mfile_key); 
     product.update({"mProId":''+mpro_id+''},{"$set": {"fileInfo" : [{"versionId" : ''+mfile_info+'',"fileKey" : ''+mfile_key+''}]}}; 

    } 
    }   
} 
+1

我們來這裏是爲了幫助你,但不要做你的作業或家庭作業。如果你不知道編程,只需谷歌和閱讀文件。 – Saleem

回答

0

嘗試

db.collection.update({},{$set: {"fileInfo" : [ 
     { 
      "versionId" : "BHpKOLlsgIRF7JqcBrKLPDFC5OgUAUEp", 
      "fileKey" : "productFile/abc.jpg" 
     } 
]}},{multi:true}) 

這將創建fileInfo財產,如果它不存在,否則只是更新

+0

你能更新我的js代碼嗎? –

+0

我沒有完整的上下文,所以不能在你的機器上覆制你的代碼和環境。我會建議你看看並比較一下你在做什麼'product.update',並將其與我的解決方案進行比較。他們看起來一樣嗎? – Saleem

+0

你看到我的js代碼實際上是rhis fileInfo是一個示例數據,我想更新versionId和fileKey取決於mproduct.So每次它會改變,當我用你的代碼在我的腳本中它顯示一個錯誤意外的令牌 –

相關問題