Как обновить вложенную модель в mongoose и mongodb - PullRequest
0 голосов
/ 10 октября 2018

Я создаю веб-приложение для стека MEAN.

У меня есть модель в mongoose, подобная этой.Имя модели analyses, внутри которого есть свойство call points, которое является еще одним небольшим именем модели analysis

//model file
var mongoose = require('mongoose');
var Schema = mongoose.Schema; 

var analysis = new Schema({ 
  ref_id: String,
  ele_name: String,
  pos_x: Number,
  pos_y: Number,
  pos_pix_x: Number,
  pos_pix_y: Number,
});

var analyses = new Schema({    
  img_id: String,
  store_file_name:String,
  points: {
    type: [analysis],
    default: undefined
  },    
});

module.exports = mongoose.model('analyses', analyses);

В базе данных после создания записи.там что-то вроде этого enter image description here

Как видите, внутри идентификатора analyses (5bb...820e) есть массив точек (analysis), каждый из которых имеет свой собственный идентификатор ( 5bb...26d)

Теперь, если я хочу обновить это.Я использую ExpressJS для определения API обновления сервера

// API define file
var express = require('express');
var analysesRoutes = express.Router();

// Require Item model in our routes module
var Analyses = require('../models/analyses');

//  Defined update route
analysesRoutes.route('/update/:id').put(function (req, res) {
  Analyses.findById(req.params.id, function(err, analyses) {
    if (!analyses)
      return next(new Error('Could not load Document'));
    else {
      for ( item of Object.keys(req.body)){
        analyses[item] = req.body[item];
      }
      analyses.save().then(analyses => {
        res.json({...analyses, status: 200});
      })
        .catch(err => {
          res.status(400).send("unable to update the database");
        });
    }
  });
});

Но моя проблема здесь в том, что если я хочу обновить только 1 analysis пункт, я должен отправитьзапрос на обновление большого analyses объекта (вызов id 5bb...820e).Примерно так:

//service file
  updateAnalyses(newObj, id) {
    const uri = 'http://localhost:4000/analyses/update/' + id;

    this
      .http
      .put(uri, newObj)
      .subscribe(res => console.log('Done'));
  }
 // Where newObj here is a big analyses object contains all the unnecessary detail + the point need to be updated

На самом деле, у этой точки тоже есть идентификатор (5bb..26d), есть ли в любом случае обновление непосредственно к этой точке анализа ??

1 Ответ

0 голосов
/ 10 октября 2018

Подобный вопрос был дан ранее в переполнении стекаВы можете обратиться к нему отсюда: Данные обновления MongoDB во вложенном поле

PS Есть много ответов, связанных с mongodb.Лично для меня сработала запись parent.$.child.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...