我有两个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作为我的目的)。通过匹配其子项(Trade)的属性(expiresOn)来查找项目文档需要做什么?
答案 0 :(得分: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)
});
}