У меня есть эти схемы:Mongoose запрос вложенный документ возвращает пустой массив
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' }
}));
Я пытаюсь код обработчика Url от API, который возвращает детали заказа, который выглядит следующим образом:
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.find(
{ 'client.store': req.params.storeId },
function (err, results) { ... });
Я знаю, что я мог бы так же пройти cliendId к адресу и проверить первый, если клиент входит в магазин, а затем получить заказ от клиента, но я думаю, что часть клиента лишняя, не так ли? Я должен иметь возможность получить заказ безопасным способом, используя только эти два поля.
Что я здесь делаю неправильно?
Вам нужно «заполнить» указанный объект 'store' в объекте' order'. - Здесь вы можете увидеть примеры - http://mongoosejs.com/docs/populate.html – BatScream