2016-11-10 88 views
0

我的項目(Projects)用一記project它有一個數組equipInfo集合,可以說我想更新索引1的陣列數量:蒙戈更新領域的指數

"techInfo" : {  
    "equipInfo" : [ 
       { 
        "item" : { 
         "$ref" : "equipment", 
         "$id" : ObjectId("581a20cb4abab607fd17f07d") 
        }, 
        "quantity" : "22800", 
        "type" : "module" 
       }, 
       { 
        "item" : { 
         "$ref" : "equipment", 
         "$id" : ObjectId("581a20cb4abab607fd17f07e") 
        }, 
        "quantity" : "1666", <===== UPDATE THIS!!!!!! 
        "type" : "inverter" 
       } 
     ] 
} 

所以,我想:

Projects.update(
     {_id: projectId}, 
     {$set: {"techInfo.equipInfo.1.quantity": 1000000} 
    ); 

但這不起作用,我使用Meteor.js順便說一句

+0

使用0 {$設置:{「techInfo.equipInfo.1.quantity」:1000000}檢查我的答案 –

+0

你在客戶端或服務器上嘗試過嗎?你有錯誤嗎?與你期望的結果不同?正如其他人所說,你的聲明甚至沒有編譯(語法錯誤)。 – MasterAM

+0

這是一個虛假的問題?它看起來像接受的答案中的代碼匹配您的原始問題。 –

回答

2

你是什麼意思「這不行」?有錯誤嗎?

預期下的作品,如/server/main.js在一個新的流星項目:

import { Meteor } from 'meteor/meteor'; 
import { Mongo } from 'meteor/mongo' 

Projects = new Mongo.Collection("projects"); 

Meteor.startup(() => { 
    Projects.remove({}) 
    Projects.insert({ 
     "techInfo": { 
      "equipInfo": [{ 
        "item": { 
         "$ref": "equipment", 
         "$id": new Mongo.ObjectID("581a20cb4abab607fd17f07d") 
        }, 
        "quantity": "22800", 
        "type": "module" 
       }, 
       { 
        "item": { 
         "$ref": "equipment", 
         "$id": new Mongo.ObjectID("581a20cb4abab607fd17f07e") 
        }, 
        "quantity": "1666", 
        "type": "inverter" 
       } 
      ] 
     } 
    }) 
    let techInfo = Projects.findOne(); 
    Projects.update({ _id: techInfo._id }, 
     { $set: { "techInfo.equipInfo.1.quantity": 1000000 } } 
    ); 
    console.log(Projects.findOne().techInfo); 
}); 
2

我認爲你需要這樣的:

Projects.update(
    {_id: projectId}, 
    {$set: {"techInfo.equipInfo.1.quantity": 1000000} 
); 
1

這應該工作,該{$set需要關閉

Projects.update(
    {_id: projectId}, 
    {$set: {"techInfo.equipInfo.1.quantity": 1000000}} 
); 
2

如果您只想更新陣列的第一個對象,而不依賴於條件這是您的解決方案

Projects.update({_id: projectId},{$set : {"techInfo.equipInfo.0.quantity" : 1000000}}) 

如果你想通過元素遍歷查找陣列和更新,你可以使用這個

Projects.update({_id: projectId,"techInfo.equipInfo" : {"$elemMatch" : {"type" : "module"}}},{$set : {"techInfo.equipInfo.$.quantity" : 1000000}})