从另一条记录中检索其ID后,在Mongo中更新记录

时间:2016-09-18 20:46:25

标签: node.js mongodb express

我正在尝试创建一个可以执行以下操作的API点。我在路径中提交了一个Object ID。找到具有该ID的记录。然后,程序查看该对象的某个字段。该字段包含数据库中另一个条目的ObjectID。最后,我需要拉出该记录并增加其中的某个字段。

简而言之,我在某些记录之间存在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 个答案:

答案 0 :(得分:1)

首先使用mongo引用,继承人文件: https://docs.mongodb.com/manual/reference/database-references/

这是mongoose文档 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')
  }
})