我无法弄清楚这一点。这是我正在使用的模型:
var Groceries = new Schema({
name : {type : String, required : true}
items : {type : Array, required : true}
});
items
只是Array
的{{1}}。示例对象如下所示:
Strings
现在,我将收到一条有三件事的POST请求:
name : "Shopping List"
items : ["Bananas", "Apples", "Oranges"]
name
index
。示例有效负载是:
item
我希望能够按名称查找相应的列表,然后将{
"name" : "Shopping List",
"replacementIndex" : "2",
"newItem" : "Cereal"
}
上的值替换为replacementIndex
中的值。
我该怎么做?
答案 0 :(得分:0)
从有效负载动态创建更新查询。在mongo shell中,以下演示展示了如何采用这种方法:
// 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
属性值“Shopping List”且其items
数组具有的元素的集合
索引2.如果找到文档,则使用 $set
运算符将数组元素替换为指定值。
Mongoose的实施过程非常简单:
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);
})