2016-09-18 68 views
0

我试图做一个API点,将执行以下操作。我在路径中提交一个对象ID。找到具有该ID的记录。然后,程序会查看该对象的某个字段。该字段包含数据库中另一个条目的ObjectID。最后,我需要拉起那条记录并在其中增加一个特定的字段。在从另一个记录中检索其ID后更新Mongo中的记录

总之,我有一个child->parent某些记录之间的关系,并希望通过将该孩子的ID提交给API点来增加父记录中某个字段的能力。

这是我做了基本的孩子增量的代码。我怎么能为父母做这件事?

router.get('/today/parent/up/:id', function(req, res){ 
     var collection = db.get('Activity'); 
     collection.update({ 
      _id: req.params.id 
     }, 
     { 
      $inc: { 
      "repetitions.today": 1, 
      "repetitions.total": 1 
      } 
     }, function(err, activity){ 
      if (err) throw err; 
      res.json(activity); 
     }); 
}) 
+1

猫鼬没有关系导致其非关系型数据库。您是否使用参考?如果是这样,你可以填充引用,然后更新它。请记住,您无法直接通过引用所在的对象更新引用。告诉我们关于你的“关系”的更多信息 – Mort

+0

我不确定参考文献。我所做的是将父对象的ObjectID存储在子对象的其中一个字段中。也许这不是最佳做法。什么是更好的方法? – MadPhysicist

回答

1

首先使用蒙戈参考,继承人documenttion: https://docs.mongodb.com/manual/reference/database-references/

这里的猫鼬文档 http://mongoosejs.com/docs/2.7.x/docs/populate.html

基本上你需要这样做:

var mongoose = require('mongoose') 
, Schema = mongoose.Schema 

var PersonSchema = new Schema({ 
    name : String 
, age  : Number 
, stories : [{ type: Schema.ObjectId, ref: 'Story' }] 
}); 

var StorySchema = new Schema({ 
    _creator : { type: Schema.ObjectId, ref: 'Person' } 
, title : String 
, fans  : [{ type: Schema.ObjectId, ref: 'Person' }] 
}); 

var Story = mongoose.model('Story', StorySchema); 
var Person = mongoose.model('Person', PersonSchema); 

那么你可以使用.populate ()方法,然后您可以提取您的填充模型并进行更改并使用.save()保存它们,但请记住在填充模型中使用它,而不要在父级模型中使用它。例如。你有作者,其中包含书籍的参考,所以你提出要求

author.findOne({'name': 'King'}).populate('books').exec((err, king) => { 
    let book0 = king.books[0]; 
    book0.title = 'I need to change this one'; 
    book0.save((err, data) => { 
    console.log('saved referenced object') 
    } 
}) 
相关问题