向数组内的对象发出发布/提交请求

时间:2020-06-18 11:38:31

标签: javascript reactjs mongodb rest express

我在mongo DB中存储了许多类似以下的文件。

{
        "posts": [
            {
                "_id": "5ee38b041385d900004e78de",
                "postName": "Driver one",
                "hasSublevels": false,
                "isChildOfOther": false,
                regions: []
            },
            {
                "_id": "5ee38b0e1385d900004e78df",
                "postName": "Driver 2",
                "hasSublevels": true,
                "isChildOfOther": false,
                regions: []
            },
            {
                "_id": "5ee38b1b1385d900004e78e0",
                "postName": "Driver 3",
                "hasSublevels": true,
                "isChildOfOther": true,
                regions: []
            },
            {
                "_id": "5ee38b281385d900004e78e1",
                "postName": "Driver 4",
                "hasSublevels": true,
                "isChildOfOther": true,
                regions: []
            },
            {
                "_id": "5ee38b3a1385d900004e78e2",
                "postName": "Driver 5",
                "hasSublevels": true,
                "isChildOfOther": false,
                regions: []
            },
            {
                "_id": "5ee38b461385d900004e78e3",
                "postName": "Driver 6",
                "hasSublevels": true,
                "isChildOfOther": true,
                regions: []
            }
        ],
        "_id": "5ee38b499bd40260ad591d7e",
        "name": "Cabs NY",
        "date": "2020-06-12T14:03:53.343Z",
        "__v": 0
    },

每个帖子都有一个如上所述的region数组。我想将值添加到posts数组内的region字段。 我如何提出一个请求,首先通过id检索特定文档?其次,允许我在特定的post对象中的regions数组中添加一个或多个值吗?

3 个答案:

答案 0 :(得分:0)

第一部分的代码,第二部分,您可以使用id.regions,然后像我一样将数据推送到其中。

result ={
        "posts": [
                {
                    "_id": "5ee38b041385d900004e78de",
                    "postName": "Driver one",
                    "hasSublevels": false,
                    "isChildOfOther": false,
                    regions: []
                },
                {
                    "_id": "5ee38b0e1385d900004e78df",
                    "postName": "Driver 2",
                    "hasSublevels": true,
                    "isChildOfOther": false,
                    regions: []
                },
                {
                    "_id": "5ee38b1b1385d900004e78e0",
                    "postName": "Driver 3",
                    "hasSublevels": true,
                    "isChildOfOther": true,
                    regions: []
                },
                {
                    "_id": "5ee38b281385d900004e78e1",
                    "postName": "Driver 4",
                    "hasSublevels": true,
                    "isChildOfOther": true,
                    regions: []
                },
                {
                    "_id": "5ee38b3a1385d900004e78e2",
                    "postName": "Driver 5",
                    "hasSublevels": true,
                    "isChildOfOther": false,
                    regions: []
                },
                {
                    "_id": "5ee38b461385d900004e78e3",
                    "postName": "Driver 6",
                    "hasSublevels": true,
                    "isChildOfOther": true,
                    regions: []
                }
            ]
        }
results = result.posts;
 
 groups = {};   
  for (var i in results) {           
  var groupName = results[i]._id;          
  if (!groups[results[i]._id]) {             
  groups[groupName] = [];  
  }  
  groups[groupName].push({"regions" :results[i].regions});             
  }           
  console.log(groups);
   

答案 1 :(得分:0)

const id = "5ee38b3a1385d900004e78e2";

找到与上面的ID链接的帖子。

const post = posts.find(post => post._id === id);

要添加到地区数组的有效载荷

const payload = {city: Nairobi, Country: Kenya};

将有效载荷添加到区域数组

post.regions.push(payload);

如果您使用猫鼬::

const post = Posts.findById(id);
if(!post) res.status(404).json({
      msg: "Specified post not found."
    });

让我们使用上面的有效载荷。

将有效载荷添加到区域数组

post.regions.push(payload)

保存

post.save()

返回新帖子。

答案 2 :(得分:0)

根据MongoDB文档https://docs.mongodb.com/manual/reference/operator/update/push/,您可以使用$ push运算符向数组添加值,就像Alpha的示例一样。

看起来像

db.posts.update(
   { _id: "5ee38b281385d900004e78e1" },
   { $push: { regions: "West" } }
)

或追加多个

db.posts.update(
   { _id: "5ee38b281385d900004e78e1" },
   { $push: { regions: { $each: ["West", "East", "South"] } } }
)