Выполнение запроса на публикацию / размещение объекта внутри массива - PullRequest
1 голос
/ 18 июня 2020

У меня есть много документов, подобных следующему, хранящегося внутри mon go 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
    },

У каждого сообщения есть массив регионов, как показано выше. Я хочу добавить значения в поле региона внутри массива сообщений. Как сделать запрос, который сначала получает конкретный документ по идентификатору? Во-вторых, позволяет мне добавить значения в массив регионов в конкретном объекте сообщения?

Ответы [ 3 ]

0 голосов
/ 18 июня 2020
const id = "5ee38b3a1385d900004e78e2";

найдите сообщение, связанное с указанным выше идентификатором.

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

полезная нагрузка для добавления в массив регионов

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

Добавление полезной нагрузки в массив регионов

post.regions.push(payload);

, если вы используете mon goose ::

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

Давайте использовать полезную нагрузку выше.

Добавить полезную нагрузку в массив регионов

post.regions.push(payload)

Сохранить

post.save()

вернуть новое сообщение.

0 голосов
/ 18 июня 2020

Согласно документации MongoDB https://docs.mongodb.com/manual/reference/operator/update/push/ вы можете использовать оператор $ pu sh для добавления значения в массив, как в примере Alpha.

Это будет выглядеть

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

Или добавить несколько

db.posts.update(
   { _id: "5ee38b281385d900004e78e1" },
   { $push: { regions: { $each: ["West", "East", "South"] } } }
)
0 голосов
/ 18 июня 2020

Этот код для первой части, во второй части вы можете использовать id.regions, а затем sh данные в него, как я.

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);
   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...