2016-06-11 98 views
0

我有嵌入文檔的架構,該設置是這樣的:如何使用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? 

    }); 
    } 
}); 

一切正常,但我不知道如何獲取新創建的嵌入式訪客文檔。我特別需要身份證,但我希望整個新客人在我的回覆中。在device.save函數中,device.guests已經有了新創建的記錄的ID,所以我可以通過它循環並找到它,但我想知道是否有更簡單的方法來做到這一點。

回答

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

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

    }); 
+0

是的,我想在這裏使用的設備,但這個對象返回整個設備,而不僅僅是新客我只是增加。 – passatgt

+0

@passatgt嘗試'device.guests [device.guests.length-1] ._ id'你也可以在device.guests.push()之後執行此操作。 –

+0

@很抱歉...我不知道stackoverflow的評論是如何工作的......可以解釋「代碼只回答傾向於」是什麼?......我的意思是,在我的例子中,如果他需要「客人」。 _id'後,他需要使用'device.guests [device.guests.length-1] ._ id' –

0

如果實際上使用new運算符創建Guests實體,則會填充_id屬性。嘗試是這樣的:

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