2016-01-28 3 views
0

У меня есть два Mongoose Schemas:Поиск Mongoose поддокумент временем обновленный

var ItemSchema = new Schema({ 
    trade: { 
     type: Schema.Types.ObjectId, 
     ref: 'Trade' 
    } 
}); 

var Item = mongoose.model('Item', ItemSchema); 

и

var TradeSchema = new Schema({ 
    expiresOn: { 
     type: Date 
    } 
}); 

var Trade = mongoose.model('Trade', TradeSchema); 

Я пытаюсь использовать Item.find(), чтобы найти элемент, если его дата заключения сделки меньше чем дата, через которую пользователь проходит через строку запроса в запросе. Я использую следующий код:

if (req.query.expiresBefore) { 
    Item.find({ 
     'trade.expiresOn': { 
      $lte: req.query.expiresBefore 
     } 
    }, function (err, trades) { 
     console.log(trades) 
    }) 
} 

Однако, я получаю пустой массив на вызове console.log(). Использование $ gte также возвращает пустой массив (хотя мое исследование говорит мне, что мне нужно использовать $ lte для моих целей). Что мне нужно сделать, чтобы найти документ элемента, сопоставляя свойство (expiresOn) его дочернего элемента (Trade)?

ответ

0

Ссылаясь на это Stackoverflow question, то, что вы хотите сделать, не представляется возможным. Я не уверен, почему вы устанавливаете схемы таким образом, но если вы хотите сохранить их такими, какие они есть. Я хотел бы предложить вам сделать небольшое изменение, как следующий

var ItemSchema = new Schema({ 
    trade: { 
     type: Schema.Types.ObjectId, 
     ref: 'Trade' 
    } 
}); 

var Item = mongoose.model('Item', ItemSchema); 

и

var TradeSchema = new Schema({ 
    itemId: { //add this 
     type: Schema.Types.ObjectId, 
     ref: 'Item' 
    }, 
    expiresOn: { 
     type: Date 
    } 
}); 

var Trade = mongoose.model('Trade', TradeSchema); 

if (req.query.expiresBefore) { 
    Trade. 
     find({ 
      'expiresOn': { 
       $lte: req.query.expiresBefore 
      } 
     }). 
     populate('itemId'). 
     exec(function (err, trades) { 
      console.log(trades) 
     }); 
} 
+0

Это помогло, спасибо! –

Смежные вопросы