gpt4 book ai didi

node.js - 更新 Mongoose 模型对象的数组项

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:00 25 4
gpt4 key购买 nike

我一直没能弄清楚这一点。这是我正在使用的模型:

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. 购物 list 的名称
  2. 我要替换的项目的索引
  3. 项目将取代现有项目。

示例有效负载是:

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

我希望能够按名称查找适当的列表,然后将 replacementIndex 处的值替换为 newItem 中给出的值。

我该怎么做?

最佳答案

从有效负载动态创建更新查询。在 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);
})

关于node.js - 更新 Mongoose 模型对象的数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35283378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com