2016-02-09 28 views
1

我一直無法弄清楚這一點。這是我與工作模式:更新Mongoose模型對象的數組項目

var Groceries = new Schema({ 
    name : {type : String, required : true} 
    items : {type : Array, required : true} 
}); 

items只是StringsArray。一個例子中的物體應該是這樣的:

name : "Shopping List" 
items : ["Bananas", "Apples", "Oranges"] 

現在,我會越來越有三樣東西POST請求:

  1. 的購物清單
  2. 一個項目的indexname我將取代
  3. 新的item將取代現有的一個。

一個例子有效載荷:

{ 
    "name" : "Shopping List", 
    "replacementIndex" : "2", 
    "newItem" : "Cereal" 
} 

我希望能夠查找相應的列表,按名稱,然後更換在replacementIndex什麼是newItem給出的值。

我該怎麼做?

回答

0

從有效負載動態創建更新查詢。在蒙戈外殼,下面的演示展示瞭如何利用這種方法:

// populate a test collection 
db.test.insert({name : "Shopping List", items : ["Bananas", "Apples", "Oranges"]}) 

// dynamically create the query 
var payload = { 
    "name" : "Shopping List", 
    "replacementIndex" : "2", 
    "newItem" : "Cereal" 
}; 
var query = {}, 
    update = {"$set": {}}; 
query["name"] = payload.name; 
query["items."+payload.replacementIndex] = { "$exists": true }; // query = {"name": "Shopping List", "items.2": { "$exists": true }} 
update["$set"]["items."+payload.replacementIndex] = payload.newItem; // update = {"$set": { "items.2": "Cereal" }} 

// update collection 
db.test.update(query, update); 

在上面,你要查詢的是有name屬性值「購物清單」,其items數組有一個元素文檔集合 具有索引2.如果找到該文檔,則使用運算符將​​該數組元素替換爲指定的值。

貓鼬實施平凡如下:

var query = {}, 
    update = {"$set": {}}; 
query["name"] = payload.name; 
query["items."+payload.replacementIndex] = { "$exists": true }; // query = {"name": "Shopping List", "items.2": { "$exists": true }} 
update["$set"]["items."+payload.replacementIndex] = payload.newItem; // update = {"$set": { "items.2": "Cereal" }} 

Model.update(query, update, function(err, result){ 
    if (err) { /* Handle err */ } 
    console.log(result); 
}) 
+1

謝謝!我甚至不知道存在$存在。感謝所有的幫助! – Ash

+0

@AshBhatnagar LOL! '存在'存在:) – chridam

相關問題