如何使用Mongoose获取新创建的嵌入式文档?

时间:2016-06-11 14:15:56

标签: node.js mongodb mongoose

我有一个包含嵌入文档的模式,设置如下:

var Guests = new Schema({
  email: {
        type: String,
        required: true
    },
  time: {
        type: Date,
        default: Date.now
    }
});

var Devices = new Schema({
  user: {
        type: String,
        required: true
    },
  time: {
        type: Date,
        default: Date.now
    },
  name: {
        type: String,
        required: true
    },
  guests: [Guests]
});

我使用以下代码创建一个新访客:

// Check if already invited
Device.findOne({ '_id': req.body.device_id, 'user': req.user.href, 'guests.email': req.body.guest_email }, function (err, guest) {

  // Check for error
  if (err) return handleError(err);

  // If already invited
  if (guest) {
    return res.status(402).send({code: 'already_invited', message: 'This guests is already invited.'});
  } else {
    // If not invited yet, lets create the new guest
    device.guests.push({
      "email": req.body.guest_email
    });

    // Save the new guest to device
    device.save(function (err) {
      if (err) res.status(400).send(err);

      // Get the saved guest ID, but how?

    });
  }
});

一切正常,但我不知道如何获取新创建的嵌入式客户文档。我特别需要ID,但我希望我的回复中有全新的客人。在device.save函数内部,device.guests已经拥有了新创建的记录的ID,所以我可以循环遍历它并找到它,但我想知道是否有更简单的方法。

2 个答案:

答案 0 :(得分:0)

 device.save(function (device, err) {
      if (err) res.status(400).send(err);

      // use device here. i.e res.status(200).json(device);

    });

答案 1 :(得分:0)

如果您实际使用new运算符创建Guests实体,则将填充_id属性。尝试这样的事情:

var guest = new Guests({guest_email: "foo"});
device.guests.push(guest);