Mongoose,是否可以在一次调用中将父ID分配给子文档?

时间:2016-01-06 02:46:39

标签: node.js mongodb mongoose

我想知道是否有可能(或者甚至需要)在一次调用中提供一个子文档,其中引用了它的父ID。这是我正在使用的代码:

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

var LatLng = new Schema({
  id: Schema.ObjectId,
  created_at: Date,
  accuracy: {
    type: Number,
    required: true
  },
  latitude: {
    type: Number,
    required: true
  },
  longitude: {
    type: Number,
    required: true
  },
  _walk: {
    type: Schema.ObjectId,
    ref: 'Walk',
    required: true
  }
});
LatLng.pre('save', function(next){
  if(!this.created_at)
    this.created_at = new Date();
});

var Walk = new Schema({
  id: Schema.ObjectId,
  created_at: Date,
  updated_at: Date,
  description: String,
  elapsedTime: Number,
  distance: Number,
  waypoints: [LatLng],
  _user: {
    type: Schema.ObjectId,
    ref: 'User',
    required: true
  }
});

Walk.pre('save', function(next){
  var now = new Date();
  this.updated_at = now;
  if(!this.created_at)
    this.created_at = now;
  next();
});

Walk.pre('update', function(next){
  this.updated_at = new Date();
});

Walk.pre('findOneAndUpdate', function(next){
  this.updated_at = new Date();
});

Walk.pre('findByIdAndUpdate', function(next){
  this.updated_at = new Date();
});

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

想知道是否有某种方式(可能在LatLng.pre('save')中)将LatLng._walk分配给Walk.id

所以当我做类似的事情时:

var walk = new Walk({
    description: req.body.description,
    elapsedTime: req.body.elapsedTime,
    distance: req.body.distance,
    waypoints: req.body.waypoints,
    _user: req.user._id
  });

这样我就可以拨打walk.save(),而不必遍历waypoints并手动将_walk分配给walk._id

我希望这是有道理的,谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

如果您确实需要它,为什么不在此之前手动创建它并使用它保存文档。您可以自己生成ObjectId,而不是让mongo处理它。没有什么可以反对的。