0
我有這些模式:貓鼬查詢嵌套文檔返回空數組
var Store = mongoose.model('Store', new Schema({
name: String
}));
var Client = mongoose.model('Cllient', new Schema({
name: String,
store: { type: Schema.ObjectId, ref: 'Store' }
}));
var Order = mongoose.model('Order', new Schema({
number: String,
client: { type: Schema.ObjectId, ref: 'Client' }
}));
我試圖代碼,返回訂單詳細信息的API,它看起來像這樣的URL處理器:
app.get('/api/store/:storeId/order/:orderId', function (...));
我在Url中傳遞商店標識以快速檢查記錄的用戶是否具有商店權限。如果不是,則返回403狀態。這就是說,我認爲這個storeId和orderId是足夠的數據來獲得訂單,所以我試圖對嵌套文檔進行查詢,但它不起作用。
Order.findOne(
{ 'client.store': req.params.storeId, _id: req.params.orderId },
function (err, order) { ... });
但是order對象爲null;
即使當我執行查找,它返回一個空數組:
Order.find(
{ 'client.store': req.params.storeId },
function (err, results) { ... });
我知道我可以在cliendId以及傳遞給url並首先檢查客戶端所屬的存儲,然後從客戶端取回訂單,但我認爲客戶端部分是多餘的,您不覺得嗎?我應該能夠通過僅使用這兩個字段以安全的方式獲得訂單。
我在這裏做錯了什麼?
您需要在'order'對象內'填充'引用的'store'對象。 - 你可以在這裏看到例子 - http://mongoosejs.com/docs/populate.html – BatScream 2015-02-17 23:09:26