我有一个包含嵌入文档的模式,设置如下:
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,所以我可以循环遍历它并找到它,但我想知道是否有更简单的方法。
答案 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);