我正在尝试创建一个可以执行以下操作的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);
});
})
答案 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')
}
})