2015-11-22 70 views
1

我試圖使用以下代碼在陣列的一個特定的索引推值的數組:如何在nodejs中使用mongoose將值推送到特定的數組索引?

Freezer.update(conditions, {$push: {shelves[shelfindex] : {"rackname": rackname, "columns": columns, "rows": rows, "spaces" : []}}}, function (err, doc){ 

      console.log(doc); 
     }) 

其中shelfindex是在手擱板的索引,即我發現對於環中的前述(代碼未顯示)。

它不工作(程序甚至不會啓動)。我收到以下錯誤:

SyntaxError: Unexpected token [ 

我的書架陣列設置如下:

[{"racks":[],"shelfname":"Shelf 1"},{"racks":[],"shelfname":"Shelf 2"},{"racks":[],"shelfname":"Shelf 3"}] 

因此,舉例來說,如果我試圖「貨架1」我試圖將其推到推架數據到:

shelves[0].racks 

解決方案的任何想法?

回答

0

如果您已經顯示了Freezer模型模式,會有點幫助。儘管如此,下面的例子是基於所述樣本數據(示例):

{ 
    "_id" : ObjectId("565236570f7f257d5feffa10"), 
    "shelves" : [ 
     { 
      "racks" : [], 
      "shelfname" : "Shelf 1" 
     }, 
     { 
      "racks" : [], 
      "shelfname" : "Shelf 2" 
     }, 
     { 
      "racks" : [], 
      "shelfname" : "Shelf 3" 
     } 
    ] 
} 

所以,推架數據到"Shelf 1"貨架在蒙戈殼將使用positional $操作者只支持一級深,並且只有第一匹配元素在其更新中。請注意,在shelves數組字段必須出現在查詢文檔的一部分,因此{ "shelves.shelfname": "Shelf 1" }

db.freezer.update(
    { "shelves.shelfname": "Shelf 1" }, 
    { 
     "$push": { 
      "shelves.$.racks": { 
       "rackname": 1, 
       "columns": 3, 
       "rows": 2, 
       "spaces" : []  
      } 
     } 
    } 
); 

現在,如果你知道那麼具體數組索引使用bracket notation創建更新文件:

var update = { "$push": {} }, 
    condition = { }; 

condition["shelves.shelfname"] = "Shelf "+ shelfindex + 1; 
update["$push"]["shelves."+ shelfindex +".racks" ] = { 
    "rackname": rackname, 
    "columns": columns, 
    "rows": rows, 
    "spaces" : [] 
}; 

db.freezer.update(condition, update); 

在你的node.js中,這將是類似的,但有回調:

Freezer.update(conditions, update, function (err, doc){ 
    console.log(doc); 
}); 
相關問題